You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by bo...@apache.org on 2010/04/18 17:39:46 UTC

svn commit: r935357 - /xerces/c/trunk/src/xercesc/parsers/AbstractDOMParser.cpp

Author: borisk
Date: Sun Apr 18 15:39:46 2010
New Revision: 935357

URL: http://svn.apache.org/viewvc?rev=935357&view=rev
Log:
Recover from the mismatching start/end even count which may happen when
we continue parsing a invalid document (XERCESC-1919).

Modified:
    xerces/c/trunk/src/xercesc/parsers/AbstractDOMParser.cpp

Modified: xerces/c/trunk/src/xercesc/parsers/AbstractDOMParser.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/parsers/AbstractDOMParser.cpp?rev=935357&r1=935356&r2=935357&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/parsers/AbstractDOMParser.cpp (original)
+++ xerces/c/trunk/src/xercesc/parsers/AbstractDOMParser.cpp Sun Apr 18 15:39:46 2010
@@ -24,8 +24,6 @@
 *
 */
 
-
-
 // ---------------------------------------------------------------------------
 //  Includes
 // ---------------------------------------------------------------------------
@@ -853,6 +851,15 @@ void AbstractDOMParser::endEntityReferen
     fCurrentNode   = fCurrentParent;
     fCurrentParent = fCurrentNode->getParentNode ();
 
+    // When the document is invalid but we continue parsing, we may
+    // end up seeing more 'end' events than the 'start' ones.
+    //
+    if (fCurrentParent == 0 && fDocument != 0)
+    {
+      fCurrentNode = fDocument->getDocumentElement ();
+      fCurrentParent = fCurrentNode;
+    }
+
     if (erImpl)
         erImpl->setReadOnly(true, true);
 }
@@ -866,6 +873,15 @@ void AbstractDOMParser::endElement( cons
     fCurrentNode   = fCurrentParent;
     fCurrentParent = fCurrentNode->getParentNode ();
 
+    // When the document is invalid but we continue parsing, we may
+    // end up seeing more 'end' events than the 'start' ones.
+    //
+    if (fCurrentParent == 0 && fDocument != 0)
+    {
+      fCurrentNode = fDocument->getDocumentElement ();
+      fCurrentParent = fCurrentNode;
+    }
+
     // If we've hit the end of content, clear the flag.
     //
     if (fCurrentParent == fDocument)



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