mrglavas    2004/03/05 14:17:01

  Modified:    java/src/org/apache/xerces/xinclude XIncludeTextReader.java
               java/src/org/apache/xerces/impl/io
                        MalformedByteSequenceException.java
               java/src/org/apache/xerces/impl XMLDocumentScannerImpl.java
                        XMLEntityManager.java
                        XMLDocumentFragmentScannerImpl.java
  Log:
  Fixing Bug #27083 & #27422:

  http://nagoya.apache.org/bugzilla/show_bug.cgi?id=27083

  http://nagoya.apache.org/bugzilla/show_bug.cgi?id=27422

  

  Malformed UTF-8 and US-ASCII byte sequences encountered

  while parsing a document are well-formedness errors. Report

  them to the error reporter like every other well-formedness

  violation instead of letting the IOException propogate the

  user.

  

  This fixes a bug in XInclude processing where the processor

  would treat an IOException thrown because one of our

  readers detected a bad byte sequence as a ResourceError,

  causing the XInclude processor to look for a fallback to

  parse instead of failing. The result of this would be a

  malformed stream of events.

  

  For ASCII, we were only using our built-in reader if the 

  encoding specified was the canonical name US-ASCII. For

  aliases the Java InputStreamReader was being picked up

  which doesn't seem to report bad ASCII bytes. Now we

  look into the EncodingMap so that we cover all of ASCII's

  aliases.
  
  Revision  Changes    Path
  1.9       +11 -9     
xml-xerces/java/src/org/apache/xerces/xinclude/XIncludeTextReader.java
  
  Index: XIncludeTextReader.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/xinclude/XIncludeTextReader.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XIncludeTextReader.java   24 Feb 2004 23:15:52 -0000      1.8
  +++ XIncludeTextReader.java   5 Mar 2004 22:17:00 -0000       1.9
  @@ -229,19 +229,15 @@
               consumeBOM(stream, encoding);
               
               // If the document is UTF-8 or US-ASCII use 
  -            // the Xerces readers for these encodings.
  +            // the Xerces readers for these encodings. For
  +            // US-ASCII consult the encoding map since
  +            // this encoding has many aliases.
               if (encoding.equals("UTF-8")) {
                   return new UTF8Reader(stream, 
                       XMLEntityManager.DEFAULT_BUFFER_SIZE, 
                       
fErrorReporter.getMessageFormatter(XMLMessageFormatter.XML_DOMAIN), 
                       fErrorReporter.getLocale() );
               }
  -            else if (encoding.equals("US-ASCII")) {
  -                return new ASCIIReader(stream,
  -                    XMLEntityManager.DEFAULT_BUFFER_SIZE,
  -                    
fErrorReporter.getMessageFormatter(XMLMessageFormatter.XML_DOMAIN), 
  -                    fErrorReporter.getLocale() );
  -            }
               
               // Try to use a Java reader.
               String javaEncoding = EncodingMap.getIANA2JavaMapping(encoding);
  @@ -256,7 +252,13 @@
                throw new IOException( aFormatter.formatMessage( aLocale, 
                    "EncodingDeclInvalid", 
                       new Object[] {encoding} ) );
  -            }            
  +            }
  +            else if (javaEncoding.equals("ASCII")) {
  +                return new ASCIIReader(stream,
  +                    XMLEntityManager.DEFAULT_BUFFER_SIZE,
  +                    
fErrorReporter.getMessageFormatter(XMLMessageFormatter.XML_DOMAIN), 
  +                    fErrorReporter.getLocale() );
  +            }
               
               return new InputStreamReader(stream, javaEncoding);
           }
  
  
  
  1.2       +3 -3      
xml-xerces/java/src/org/apache/xerces/impl/io/MalformedByteSequenceException.java
  
  Index: MalformedByteSequenceException.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/io/MalformedByteSequenceException.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MalformedByteSequenceException.java       4 Mar 2004 19:27:13 -0000       1.1
  +++ MalformedByteSequenceException.java       5 Mar 2004 22:17:00 -0000       1.2
  @@ -16,7 +16,7 @@
    
   package org.apache.xerces.impl.io;
   
  -import java.io.IOException;
  +import java.io.CharConversionException;
   import java.util.Locale;
   import org.apache.xerces.util.MessageFormatter;
   
  @@ -29,7 +29,7 @@
    *
    * @version $Id$
    */
  -public class MalformedByteSequenceException extends IOException {
  +public class MalformedByteSequenceException extends CharConversionException {
   
       //
       // Data
  
  
  
  1.41      +22 -4     
xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java
  
  Index: XMLDocumentScannerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- XMLDocumentScannerImpl.java       27 Feb 2004 20:36:07 -0000      1.40
  +++ XMLDocumentScannerImpl.java       5 Mar 2004 22:17:00 -0000       1.41
  @@ -19,6 +19,7 @@
   import java.io.EOFException;
   import java.io.IOException;
   
  +import org.apache.xerces.impl.io.MalformedByteSequenceException;
   import org.apache.xerces.impl.validation.ValidationManager;
   import org.apache.xerces.util.NamespaceSupport;
   import org.apache.xerces.util.XMLChar;
  @@ -667,7 +668,11 @@
                   // if no XMLDecl, then scan piece of prolog
                   return true;
               }
  -
  +            catch (MalformedByteSequenceException e) {
  +                fErrorReporter.reportError(e.getDomain(), e.getKey(), 
  +                    e.getArguments(), XMLErrorReporter.SEVERITY_FATAL_ERROR);
  +                return false;
  +            }
               // premature end of file
               catch (EOFException e) {
                   reportFatalError("PrematureEOF", null);
  @@ -831,7 +836,11 @@
                       setDispatcher(fContentDispatcher);
                   }
               }
  -
  +            catch (MalformedByteSequenceException e) {
  +                fErrorReporter.reportError(e.getDomain(), e.getKey(), 
  +                    e.getArguments(), XMLErrorReporter.SEVERITY_FATAL_ERROR);
  +                return false;
  +            }
               // premature end of file
               catch (EOFException e) {
                   reportFatalError("PrematureEOF", null);
  @@ -940,7 +949,11 @@
                       }
                   } while (complete || again);
               }
  -
  +            catch (MalformedByteSequenceException e) {
  +                fErrorReporter.reportError(e.getDomain(), e.getKey(), 
  +                    e.getArguments(), XMLErrorReporter.SEVERITY_FATAL_ERROR);
  +                return false;
  +            }
               // premature end of file
               catch (EOFException e) {
                   reportFatalError("PrematureEOF", null);
  @@ -1174,6 +1187,11 @@
                           }
                       }
                   } while (complete || again);
  +            }
  +            catch (MalformedByteSequenceException e) {
  +                fErrorReporter.reportError(e.getDomain(), e.getKey(), 
  +                    e.getArguments(), XMLErrorReporter.SEVERITY_FATAL_ERROR);
  +                return false;
               }
               catch (EOFException e) {
                   // NOTE: This is the only place we're allowed to reach
  
  
  
  1.78      +9 -7      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.77
  retrieving revision 1.78
  diff -u -r1.77 -r1.78
  --- XMLEntityManager.java     27 Feb 2004 20:40:00 -0000      1.77
  +++ XMLEntityManager.java     5 Mar 2004 22:17:00 -0000       1.78
  @@ -1847,12 +1847,6 @@
               }
               return new UTF8Reader(inputStream, fBufferSize, 
fErrorReporter.getMessageFormatter(XMLMessageFormatter.XML_DOMAIN), 
fErrorReporter.getLocale() );
           }
  -        if (ENCODING.equals("US-ASCII")) {
  -            if (DEBUG_ENCODINGS) {
  -                System.out.println("$$$ creating ASCIIReader");
  -            }
  -            return new ASCIIReader(inputStream, fBufferSize, 
fErrorReporter.getMessageFormatter(XMLMessageFormatter.XML_DOMAIN), 
fErrorReporter.getLocale());
  -        }
           if(ENCODING.equals("ISO-10646-UCS-4")) {
               if(isBigEndian != null) {
                   boolean isBE = isBigEndian.booleanValue();
  @@ -1917,6 +1911,14 @@
                   javaEncoding = "ISO8859_1";
               }
           }
  +        else if (javaEncoding.equals("ASCII")) {
  +            if (DEBUG_ENCODINGS) {
  +                System.out.println("$$$ creating ASCIIReader");
  +            }
  +            return new ASCIIReader(inputStream, fBufferSize, 
fErrorReporter.getMessageFormatter(XMLMessageFormatter.XML_DOMAIN), 
fErrorReporter.getLocale());
  +        }
  +        
  +        
           if (DEBUG_ENCODINGS) {
               System.out.print("$$$ creating Java InputStreamReader: 
encoding="+javaEncoding);
               if (javaEncoding == encoding) {
  
  
  
  1.49      +7 -2      
xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java
  
  Index: XMLDocumentFragmentScannerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- XMLDocumentFragmentScannerImpl.java       27 Feb 2004 20:36:07 -0000      1.48
  +++ XMLDocumentFragmentScannerImpl.java       5 Mar 2004 22:17:00 -0000       1.49
  @@ -19,6 +19,7 @@
   import java.io.EOFException;
   import java.io.IOException;
   
  +import org.apache.xerces.impl.io.MalformedByteSequenceException;
   import org.apache.xerces.impl.msg.XMLMessageFormatter;
   import org.apache.xerces.util.AugmentationsImpl;
   import org.apache.xerces.util.XMLAttributesImpl;
  @@ -1608,7 +1609,11 @@
                       }
                   } while (complete || again);
               }
  -    
  +            catch (MalformedByteSequenceException e) {
  +                fErrorReporter.reportError(e.getDomain(), e.getKey(), 
  +                    e.getArguments(), XMLErrorReporter.SEVERITY_FATAL_ERROR);
  +                return false;
  +            }
               // premature end of file
               catch (EOFException e) {
                   endOfFileHook(e);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to