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]

Reply via email to