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