[Lxml-checkins] r33836 - lxml/trunk/src/lxml

scoder at codespeak.net scoder at codespeak.net
Sat Oct 28 15:47:34 CEST 2006


Author: scoder
Date: Sat Oct 28 15:47:31 2006
New Revision: 33836

Modified:
   lxml/trunk/src/lxml/parser.pxi
   lxml/trunk/src/lxml/tree.pxd
   lxml/trunk/src/lxml/xmlparser.pxd
Log:
free resources after parsing: work-around a crash in libxml2's xmlCtxtReset()

Modified: lxml/trunk/src/lxml/parser.pxi
==============================================================================
--- lxml/trunk/src/lxml/parser.pxi	(original)
+++ lxml/trunk/src/lxml/parser.pxi	Sat Oct 28 15:47:31 2006
@@ -392,8 +392,11 @@
         cdef xmlParserCtxt* pctxt
         pctxt = self._parser_ctxt
         if pctxt is not NULL:
-            if pctxt.spaceTab is not NULL: # work around bug in libxml2
-                xmlparser.xmlClearParserCtxt(pctxt)
+            if pctxt.spaceTab is NULL:
+                # work around bug in libxml2
+                pctxt.spaceTab = <int*> tree.xmlMalloc(10 * sizeof(int))
+                pctxt.spaceMax = 10
+            xmlparser.xmlClearParserCtxt(pctxt)
 
     property error_log:
         def __get__(self):

Modified: lxml/trunk/src/lxml/tree.pxd
==============================================================================
--- lxml/trunk/src/lxml/tree.pxd	(original)
+++ lxml/trunk/src/lxml/tree.pxd	Sat Oct 28 15:47:31 2006
@@ -1,4 +1,4 @@
-from cstd cimport FILE
+from cstd cimport FILE, size_t
 
 cdef extern from "lxml-version.h":
     cdef char* LXML_VERSION_STRING
@@ -255,6 +255,9 @@
 cdef extern from "libxml/xmlstring.h":
     cdef char* xmlStrdup(char* cur)
 
+cdef extern from "libxml/xmlmemory.h":
+    cdef void* xmlMalloc(size_t size)
+
 cdef extern from "etree_defs.h":
     cdef int _isElement(xmlNode* node)
     cdef char* _getNs(xmlNode* node)

Modified: lxml/trunk/src/lxml/xmlparser.pxd
==============================================================================
--- lxml/trunk/src/lxml/xmlparser.pxd	(original)
+++ lxml/trunk/src/lxml/xmlparser.pxd	Sat Oct 28 15:47:31 2006
@@ -56,6 +56,7 @@
         xmlNode* node
         xmlSAXHandler* sax
         int* spaceTab
+        int spaceMax
         
     ctypedef enum xmlParserOption:
         XML_PARSE_RECOVER = 1 # recover on errors


More information about the lxml-checkins mailing list