elena 2003/03/27 08:27:35 Modified: java/src/org/apache/xerces/impl XMLVersionDetector.java XMLEntityManager.java Log: Fix the EOFException in the case of parsing an empty file. Revision Changes Path 1.6 +56 -41 xml-xerces/java/src/org/apache/xerces/impl/XMLVersionDetector.java Index: XMLVersionDetector.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLVersionDetector.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- XMLVersionDetector.java 3 Mar 2003 22:17:17 -0000 1.5 +++ XMLVersionDetector.java 27 Mar 2003 16:27:34 -0000 1.6 @@ -57,8 +57,10 @@ package org.apache.xerces.impl; +import java.io.EOFException; import java.io.IOException; +import org.apache.xerces.impl.msg.XMLMessageFormatter; import org.apache.xerces.util.SymbolTable; import org.apache.xerces.xni.XMLString; import org.apache.xerces.xni.parser.XMLComponentManager; @@ -174,48 +176,61 @@ * otherwise Constants.XML_VERSION_1_0 * @throws IOException */ - public short determineDocVersion(XMLInputSource inputSource) throws IOException { - fEncoding = fEntityManager.setupCurrentEntity(fXMLSymbol, inputSource, false, true); + public short determineDocVersion(XMLInputSource inputSource) throws IOException { + fEncoding = fEntityManager.setupCurrentEntity(fXMLSymbol, inputSource, false, true); - // must assume 1.1 at this stage so that whitespace - // handling is correct in the XML decl... - fEntityManager.setScannerVersion(Constants.XML_VERSION_1_1); - XMLEntityScanner scanner = fEntityManager.getEntityScanner(); - if(!scanner.skipString("<?xml")) { - // definitely not a well-formed 1.1 doc! - return Constants.XML_VERSION_1_0; - } - if(!scanner.skipSpaces()) { - fixupCurrentEntity(fEntityManager, EXPECTED_VERSION_STRING, 5); - return Constants.XML_VERSION_1_0; - } - if(!scanner.skipString("version")) { - fixupCurrentEntity(fEntityManager, EXPECTED_VERSION_STRING, 6); - return Constants.XML_VERSION_1_0; - } - scanner.skipSpaces(); - if(scanner.scanChar() != '=') { - fixupCurrentEntity(fEntityManager, EXPECTED_VERSION_STRING, 13); - return Constants.XML_VERSION_1_0; - } - scanner.skipSpaces(); - int quoteChar = scanner.scanChar(); - EXPECTED_VERSION_STRING[14] = (char)quoteChar; - for (int versionPos=0; versionPos<XML11_VERSION.length; versionPos++) { - EXPECTED_VERSION_STRING[15+versionPos] = (char)scanner.scanChar(); - } - // REVISIT: should we check whether this equals quoteChar? - EXPECTED_VERSION_STRING[18] = (char)scanner.scanChar(); - fixupCurrentEntity(fEntityManager, EXPECTED_VERSION_STRING, 19); - int matched = 0; - for(; matched<XML11_VERSION.length; matched++) { - if(EXPECTED_VERSION_STRING[15+matched] != XML11_VERSION[matched]) break; - } - if(matched == XML11_VERSION.length) - return Constants.XML_VERSION_1_1; - return Constants.XML_VERSION_1_0; + // must assume 1.1 at this stage so that whitespace + // handling is correct in the XML decl... + fEntityManager.setScannerVersion(Constants.XML_VERSION_1_1); + XMLEntityScanner scanner = fEntityManager.getEntityScanner(); + try { + if (!scanner.skipString("<?xml")) { + // definitely not a well-formed 1.1 doc! + return Constants.XML_VERSION_1_0; + } + if (!scanner.skipSpaces()) { + fixupCurrentEntity(fEntityManager, EXPECTED_VERSION_STRING, 5); + return Constants.XML_VERSION_1_0; + } + if (!scanner.skipString("version")) { + fixupCurrentEntity(fEntityManager, EXPECTED_VERSION_STRING, 6); + return Constants.XML_VERSION_1_0; + } + scanner.skipSpaces(); + if (scanner.scanChar() != '=') { + fixupCurrentEntity(fEntityManager, EXPECTED_VERSION_STRING, 13); + return Constants.XML_VERSION_1_0; + } + scanner.skipSpaces(); + int quoteChar = scanner.scanChar(); + EXPECTED_VERSION_STRING[14] = (char) quoteChar; + for (int versionPos = 0; versionPos < XML11_VERSION.length; versionPos++) { + EXPECTED_VERSION_STRING[15 + versionPos] = (char) scanner.scanChar(); + } + // REVISIT: should we check whether this equals quoteChar? + EXPECTED_VERSION_STRING[18] = (char) scanner.scanChar(); + fixupCurrentEntity(fEntityManager, EXPECTED_VERSION_STRING, 19); + int matched = 0; + for (; matched < XML11_VERSION.length; matched++) { + if (EXPECTED_VERSION_STRING[15 + matched] != XML11_VERSION[matched]) + break; + } + if (matched == XML11_VERSION.length) + return Constants.XML_VERSION_1_1; + return Constants.XML_VERSION_1_0; + // premature end of file + } + catch (EOFException e) { + fErrorReporter.reportError( + XMLMessageFormatter.XML_DOMAIN, + "PrematureEOF", + null, + XMLErrorReporter.SEVERITY_FATAL_ERROR); + return Constants.XML_VERSION_1_0; + + } - } + } // This method prepends "length" chars from the char array, // from offset 0, to the manager's fCurrentEntity.ch. 1.64 +2 -1 xml-xerces/java/src/org/apache/xerces/impl/XMLEntityManager.java Index: XMLEntityManager.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLEntityManager.java,v retrieving revision 1.63 retrieving revision 1.64 diff -u -r1.63 -r1.64 --- XMLEntityManager.java 26 Mar 2003 04:19:22 -0000 1.63 +++ XMLEntityManager.java 27 Mar 2003 16:27:34 -0000 1.64 @@ -1266,6 +1266,7 @@ fEntities.put(key, value); } } + fEntityHandler = null; } // reset(XMLComponentManager)
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]