--- src/org/apache/xerces/impl/XMLScanner.java.orig	2009-09-30 10:40:17.000000000 -0400
+++ src/org/apache/xerces/impl/XMLScanner.java	2009-09-30 10:43:06.000000000 -0400
@@ -1026,6 +1026,14 @@ public abstract class XMLScanner 
                     if (XMLChar.isMarkup(c) || c == ']') {
                         fStringBuffer.append((char)fEntityScanner.scanChar());
                     }
+                    else if (XMLChar.isHighSurrogate(c)) {
+                        scanSurrogates(fStringBuffer);
+                    }
+                    else if (isInvalidLiteral(c)) {
+                        reportFatalError("InvalidCharInSystemID",
+                            new Object[] { Integer.toHexString(c) });
+                        fEntityScanner.scanChar();
+                    }
                 } while (fEntityScanner.scanLiteral(quote, ident) != quote);
                 fStringBuffer.append(ident);
                 ident = fStringBuffer;
