[Lxml-checkins] r54504 - in lxml/trunk: . src/lxml

scoder at codespeak.net scoder at codespeak.net
Tue May 6 22:37:51 CEST 2008


Author: scoder
Date: Tue May  6 22:37:51 2008
New Revision: 54504

Modified:
   lxml/trunk/   (props changed)
   lxml/trunk/src/lxml/iterparse.pxi
Log:
 r4186 at delle:  sbehnel | 2008-05-06 21:56:12 +0200
 fix iterparse(): proactively free the document on parse errors if Python will not free it for us


Modified: lxml/trunk/src/lxml/iterparse.pxi
==============================================================================
--- lxml/trunk/src/lxml/iterparse.pxi	(original)
+++ lxml/trunk/src/lxml/iterparse.pxi	Tue May  6 22:37:51 2008
@@ -195,6 +195,11 @@
         python.PyList_Append(self._events, (event, node))
         return 0
 
+    cdef void _assureDocGetsFreed(self):
+        if self._c_ctxt.myDoc is not NULL and self._doc is None:
+            tree.xmlFreeDoc(self._c_ctxt.myDoc)
+            self._c_ctxt.myDoc = NULL
+
 
 cdef inline void _pushSaxStartEvent(xmlparser.xmlParserCtxt* c_ctxt,
                                     xmlNode* c_node):
@@ -454,8 +459,8 @@
                           not context._validator.isvalid()):
             self._source = None
             del context._events[:]
-            _handleParseResult(context, pctxt, NULL,
-                               self._filename, self._for_html)
+            context._assureDocGetsFreed()
+            _raiseParseError(pctxt, self._filename, context._error_log)
         if python.PyList_GET_SIZE(context._events) == 0:
             self.root = context._root
             self._source = None


More information about the lxml-checkins mailing list