You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ne...@apache.org on 2002/10/28 06:59:11 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/impl XMLNSDocumentScannerImpl.java XMLDocumentFragmentScannerImpl.java

neeraj      2002/10/27 21:59:10

  Modified:    java/src/org/apache/xerces/impl
                        XMLNSDocumentScannerImpl.java
                        XMLDocumentFragmentScannerImpl.java
  Log:
  Fixing Bug. Any component in the pipeline may open new entity using central XMLEntityManager component.
  So check in scanner ( DocumentFragmentScannerImpl , XMLNSDocumentScannerImpl )
  that the element was opened in the same entity should be made before passing
  information to the next component in the pipeline.
  
  Revision  Changes    Path
  1.7       +37 -36    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.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XMLNSDocumentScannerImpl.java	25 Oct 2002 16:44:42 -0000	1.6
  +++ XMLNSDocumentScannerImpl.java	28 Oct 2002 05:59:10 -0000	1.7
  @@ -72,8 +72,8 @@
   import org.apache.xerces.xni.NamespaceContext;
   import org.apache.xerces.xni.XMLString;
   import org.apache.xerces.xni.XNIException;
  -import org.apache.xerces.xni.parser.XMLDocumentSource; 
  -import org.apache.xerces.xni.XMLDocumentHandler; 
  +import org.apache.xerces.xni.parser.XMLDocumentSource;
  +import org.apache.xerces.xni.XMLDocumentHandler;
   import org.apache.xerces.xni.parser.XMLDocumentFilter;
   import org.apache.xerces.xni.parser.XMLComponentManager;
   import org.apache.xerces.xni.parser.XMLConfigurationException;
  @@ -82,9 +82,9 @@
    * The scanner acts as the source for the document
    * information which is communicated to the document handler.
    *
  - * This class scans an XML document, checks if document has a DTD, and if 
  + * This class scans an XML document, checks if document has a DTD, and if
    * DTD is not found the scanner will remove the DTD Validator from the pipeline and perform
  - * namespace binding. 
  + * namespace binding.
    *
    * Note: This scanner should only be used when the namespace processing is on!
    *
  @@ -111,11 +111,11 @@
   public class XMLNSDocumentScannerImpl
   extends XMLDocumentScannerImpl {
   
  -    /** If is true, the dtd validator is no longer in the pipeline 
  +    /** If is true, the dtd validator is no longer in the pipeline
         * and the scanner should bind namespaces */
  -    protected boolean fBindNamespaces;    
  +    protected boolean fBindNamespaces;
   
  -    /** If validating parser, make sure we report an error in the 
  +    /** If validating parser, make sure we report an error in the
         *   scanner if DTD grammar is missing.*/
       protected boolean fPerformValidation;
   
  @@ -134,7 +134,7 @@
       /**
        * The scanner is responsible for removing DTD validator
        * from the pipeline if it is not needed.
  -     * 
  +     *
        * @param previous The filter component before DTDValidator
        * @param dtdValidator
        *                 The DTDValidator
  @@ -144,7 +144,7 @@
           fDTDValidator = dtd;
       }
   
  -    /** 
  +    /**
        * Scans a start element. This method will handle the binding of
        * namespace information and notifying the handler of the start
        * of the element.
  @@ -152,7 +152,7 @@
        * <pre>
        * [44] EmptyElemTag ::= '&lt;' Name (S Attribute)* S? '/>'
        * [40] STag ::= '&lt;' Name (S Attribute)* S? '>'
  -     * </pre> 
  +     * </pre>
        * <p>
        * <strong>Note:</strong> This method assumes that the leading
        * '&lt;' character has been consumed.
  @@ -165,27 +165,27 @@
        * @returns True if element is empty. (i.e. It matches
        *          production [44].
        */
  -    protected boolean scanStartElement() 
  +    protected boolean scanStartElement()
       throws IOException, XNIException {
           if (DEBUG_CONTENT_SCANNING) System.out.println(">>> scanStartElementNS()");
           String rawname = null;
   
  -        // Note: namespace processing is on by default 
  +        // Note: namespace processing is on by default
           fEntityScanner.scanQName(fElementQName);
           if (fBindNamespaces) {
               fNamespaceContext.pushContext();
               rawname = fElementQName.rawname;
               if (fScannerState == SCANNER_STATE_ROOT_ELEMENT) {
                   if (fPerformValidation) {
  -                    fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN, 
  +                    fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN,
                                                  "MSG_GRAMMAR_NOT_FOUND",
                                                  new Object[]{ rawname},
                                                  XMLErrorReporter.SEVERITY_ERROR);
   
                       if (fDoctypeName == null || !fDoctypeName.equals(rawname)) {
  -                        fErrorReporter.reportError( XMLMessageFormatter.XML_DOMAIN, 
  -                                                    "RootElementTypeMustMatchDoctypedecl", 
  -                                                    new Object[]{fDoctypeName, rawname}, 
  +                        fErrorReporter.reportError( XMLMessageFormatter.XML_DOMAIN,
  +                                                    "RootElementTypeMustMatchDoctypedecl",
  +                                                    new Object[]{fDoctypeName, rawname},
                                                       XMLErrorReporter.SEVERITY_ERROR);
                       }
                   }
  @@ -207,7 +207,7 @@
               if (c == '>') {
                   fEntityScanner.scanChar();
                   break;
  -            } 
  +            }
               else if (c == '/') {
                   fEntityScanner.scanChar();
                   if (!fEntityScanner.skipChar('>')) {
  @@ -216,7 +216,7 @@
                   }
                   empty = true;
                   break;
  -            } 
  +            }
               else if (!XMLChar.isNameStart(c) || !sawSpace) {
                   reportFatalError("ElementUnterminated", new Object[]{rawname});
               }
  @@ -263,7 +263,7 @@
                                    ? fAttributeQName.prefix : XMLSymbols.EMPTY_STRING;
                   String uri = fNamespaceContext.getURI(aprefix);
                   // REVISIT: try removing the first "if" and see if it is faster.
  -                //           
  +                //
                   if (fAttributeQName.uri != null && fAttributeQName.uri == uri) {
                       checkDuplicates(fAttributeQName, fAttributes);
                       continue;
  @@ -286,6 +286,16 @@
           // call handler
           if (fDocumentHandler != null) {
               if (empty) {
  +
  +                //decrease the markup depth..
  +                fMarkupDepth--;
  +
  +                // check that this element was opened in the same entity
  +                if (fMarkupDepth < fEntityStack[fEntityDepth - 1]) {
  +                    reportFatalError("ElementEntityMismatch",
  +                                     new Object[]{fCurrentElement.rawname});
  +                }
  +
                   fDocumentHandler.emptyElement(fElementQName, fAttributes, null);
   
                   if (fBindNamespaces) {
  @@ -297,15 +307,6 @@
                       }
                       fNamespaceContext.popContext();
                   }
  -
  -                //decrease the markup depth..
  -                fMarkupDepth--;
  -
  -                // check that this element was opened in the same entity
  -                if (fMarkupDepth < fEntityStack[fEntityDepth - 1]) {
  -                    reportFatalError("ElementEntityMismatch",
  -                                     new Object[]{fCurrentElement.rawname});
  -                }
                   //pop the element off the stack..
                   fElementStack.popElement(fElementQName);
               } else {
  @@ -348,14 +349,14 @@
   
   
   
  -    /** 
  +    /**
    * Scans an attribute.
    * <p>
    * <pre>
    * [41] Attribute ::= Name Eq AttValue
  - * </pre> 
  + * </pre>
    * <p>
  - * <strong>Note:</strong> This method assumes that the next 
  + * <strong>Note:</strong> This method assumes that the next
    * character on the stream is the first character of the attribute
    * name.
    * <p>
  @@ -365,7 +366,7 @@
    *
    * @param attributes The attributes list for the scanned attribute.
    */
  -    protected void scanAttribute(XMLAttributesImpl attributes) 
  +    protected void scanAttribute(XMLAttributesImpl attributes)
       throws IOException, XNIException {
           if (DEBUG_CONTENT_SCANNING) System.out.println(">>> scanAttribute()");
   
  @@ -392,7 +393,7 @@
           }
   
           //REVISIT: one more case needs to be included: external PE and standalone is no
  -        boolean isVC =  fHasExternalDTD && !fStandalone; 
  +        boolean isVC =  fHasExternalDTD && !fStandalone;
   
           // REVISIT: it seems that this function should not take attributes, and length
           scanAttributeValue(this.fTempString, fTempString2,
  @@ -473,7 +474,7 @@
                   if (fDocumentHandler != null) {
                       fDocumentHandler.startPrefixMapping(prefix, uri, null);
                   }
  -            } 
  +            }
               else {
                   // attempt to bind attribute
                   if (fAttributeQName.prefix != null) {
  @@ -581,7 +582,7 @@
            * element. This method will also attempt to remove DTD validator
            * from the pipeline, if there is no DTD grammar. If DTD validator
            * is no longer in the pipeline bind namespaces in the scanner.
  -         * 
  +         *
            *
            * @returns True if the caller should stop and return true which
            *          allows the scanner to switch to a new scanning
  
  
  
  1.24      +5 -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.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- XMLDocumentFragmentScannerImpl.java	4 Oct 2002 21:49:51 -0000	1.23
  +++ XMLDocumentFragmentScannerImpl.java	28 Oct 2002 05:59:10 -0000	1.24
  @@ -803,7 +803,7 @@
           // call handler
           if (fDocumentHandler != null) {
               if (empty) {
  -                fDocumentHandler.emptyElement(fElementQName, fAttributes, null);
  +
                   //decrease the markup depth..
                   fMarkupDepth--;
                   // check that this element was opened in the same entity
  @@ -811,6 +811,9 @@
                       reportFatalError("ElementEntityMismatch",
                                        new Object[]{fCurrentElement.rawname});
                   }
  +
  +                fDocumentHandler.emptyElement(fElementQName, fAttributes, null);
  +
                   //pop the element off the stack..
                   fElementStack.popElement(fElementQName);
               }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org