mrglavas    2003/10/22 11:33:43

  Modified:    java/src/org/apache/xerces/impl
                        XML11NSDocumentScannerImpl.java
                        XMLNSDocumentScannerImpl.java
                        XMLDocumentFragmentScannerImpl.java
  Log:
  Fixing potential AIOOBEs and NPEs that can occur
  when the continue-after-fatal-error feature is
  set to true, and an attribute specification contains
  duplicate names.
  
  Revision  Changes    Path
  1.4       +14 -11    
xml-xerces/java/src/org/apache/xerces/impl/XML11NSDocumentScannerImpl.java
  
  Index: XML11NSDocumentScannerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XML11NSDocumentScannerImpl.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XML11NSDocumentScannerImpl.java   10 Oct 2003 18:25:40 -0000      1.3
  +++ XML11NSDocumentScannerImpl.java   22 Oct 2003 18:33:43 -0000      1.4
  @@ -377,18 +377,21 @@
           fEntityScanner.skipSpaces();
   
           // content
  -        int oldLen = attributes.getLength();
  +        int attrIndex;
   
           if (fBindNamespaces) {
  +            attrIndex = attributes.getLength();
               attributes.addAttributeNS(
                   fAttributeQName,
                   XMLSymbols.fCDATASymbol,
                   null);
           } else {
  -            attributes.addAttribute(
  -                fAttributeQName,
  -                XMLSymbols.fCDATASymbol,
  -                null);
  +            int oldLen = attributes.getLength();
  +            attrIndex =
  +                attributes.addAttribute(
  +                    fAttributeQName,
  +                    XMLSymbols.fCDATASymbol,
  +                    null);
   
               // WFC: Unique Att Spec
               if (oldLen == attributes.getLength()) {
  @@ -409,13 +412,13 @@
               fTempString2,
               fAttributeQName.rawname,
               attributes,
  -            oldLen,
  +            attrIndex,
               isVC,
               fCurrentElement.rawname);
           String value = fTempString.toString();
  -        attributes.setValue(oldLen, value);
  -        attributes.setNonNormalizedValue(oldLen, fTempString2.toString());
  -        attributes.setSpecified(oldLen, true);
  +        attributes.setValue(attrIndex, value);
  +        attributes.setNonNormalizedValue(attrIndex, fTempString2.toString());
  +        attributes.setSpecified(attrIndex, true);
   
           // record namespace declarations if any.
           if (fBindNamespaces) {
  @@ -487,14 +490,14 @@
                       uri.length() != 0 ? uri : null);
                   // bind namespace attribute to a namespace
                   attributes.setURI(
  -                    oldLen,
  +                    attrIndex,
                       fNamespaceContext.getURI(XMLSymbols.PREFIX_XMLNS));
   
               } else {
                   // attempt to bind attribute
                   if (fAttributeQName.prefix != null) {
                       attributes.setURI(
  -                        oldLen,
  +                        attrIndex,
                           fNamespaceContext.getURI(fAttributeQName.prefix));
                   }
               }
  
  
  
  1.18      +12 -10    
xml-xerces/java/src/org/apache/xerces/impl/XMLNSDocumentScannerImpl.java
  
  Index: XMLNSDocumentScannerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLNSDocumentScannerImpl.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- XMLNSDocumentScannerImpl.java     10 Oct 2003 18:25:40 -0000      1.17
  +++ XMLNSDocumentScannerImpl.java     22 Oct 2003 18:33:43 -0000      1.18
  @@ -387,13 +387,15 @@
           fEntityScanner.skipSpaces();
   
           // content
  -        int oldLen = attributes.getLength();
  -        
  +        int attrIndex;
  +       
           if (fBindNamespaces) {
  +            attrIndex = attributes.getLength();
               attributes.addAttributeNS(fAttributeQName, XMLSymbols.fCDATASymbol, 
null);
           }
           else {
  -            attributes.addAttribute(fAttributeQName, XMLSymbols.fCDATASymbol, null);
  +            int oldLen = attributes.getLength();
  +            attrIndex = attributes.addAttribute(fAttributeQName, 
XMLSymbols.fCDATASymbol, null);
                
               // WFC: Unique Att Spec
               if (oldLen == attributes.getLength()) {
  @@ -409,11 +411,11 @@
           // REVISIT: it seems that this function should not take attributes, and 
length
           scanAttributeValue(this.fTempString, fTempString2,
                              fAttributeQName.rawname, attributes,
  -                           oldLen, isVC,fCurrentElement.rawname);
  +                           attrIndex, isVC,fCurrentElement.rawname);
           String value = fTempString.toString();
  -        attributes.setValue(oldLen, value);
  -        attributes.setNonNormalizedValue(oldLen, fTempString2.toString());
  -        attributes.setSpecified(oldLen, true);
  +        attributes.setValue(attrIndex, value);
  +        attributes.setNonNormalizedValue(attrIndex, fTempString2.toString());
  +        attributes.setSpecified(attrIndex, true);
   
           // record namespace declarations if any.
           if (fBindNamespaces) {
  @@ -479,13 +481,13 @@
                   // declare prefix in context
                   fNamespaceContext.declarePrefix(prefix, uri.length() != 0 ? uri : 
null);
                   // bind namespace attribute to a namespace
  -                attributes.setURI(oldLen, 
fNamespaceContext.getURI(XMLSymbols.PREFIX_XMLNS));
  +                attributes.setURI(attrIndex, 
fNamespaceContext.getURI(XMLSymbols.PREFIX_XMLNS));
   
               }
               else {
                   // attempt to bind attribute
                   if (fAttributeQName.prefix != null) {
  -                    attributes.setURI(oldLen, 
fNamespaceContext.getURI(fAttributeQName.prefix));
  +                    attributes.setURI(attrIndex, 
fNamespaceContext.getURI(fAttributeQName.prefix));
                   }
               }
           }
  
  
  
  1.38      +6 -6      
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.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- XMLDocumentFragmentScannerImpl.java       17 Oct 2003 17:34:30 -0000      1.37
  +++ XMLDocumentFragmentScannerImpl.java       22 Oct 2003 18:33:43 -0000      1.38
  @@ -853,7 +853,7 @@
   
           // content
           int oldLen = attributes.getLength();
  -        attributes.addAttribute(fAttributeQName, XMLSymbols.fCDATASymbol, null);
  +        int attrIndex = attributes.addAttribute(fAttributeQName, 
XMLSymbols.fCDATASymbol, null);
   
           // WFC: Unique Att Spec
           if (oldLen == attributes.getLength()) {
  @@ -865,10 +865,10 @@
           boolean isVC =  fHasExternalDTD && !fStandalone;        
           scanAttributeValue(fTempString, fTempString2,
                              fAttributeQName.rawname, attributes,
  -                           oldLen, isVC,fCurrentElement.rawname);
  -        attributes.setValue(oldLen, fTempString.toString());
  -        attributes.setNonNormalizedValue(oldLen, fTempString2.toString());
  -        attributes.setSpecified(oldLen, true);
  +                           attrIndex, isVC,fCurrentElement.rawname);
  +        attributes.setValue(attrIndex, fTempString.toString());
  +        attributes.setNonNormalizedValue(attrIndex, fTempString2.toString());
  +        attributes.setSpecified(attrIndex, true);
   
           if (DEBUG_CONTENT_SCANNING) System.out.println("<<< scanAttribute()");
       } // scanAttribute(XMLAttributes)
  
  
  

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

Reply via email to