[Lxml-checkins] r53649 - in lxml/branch/lxml-2.0: . src/lxml src/lxml/tests

scoder at codespeak.net scoder at codespeak.net
Thu Apr 10 09:04:39 CEST 2008


Author: scoder
Date: Thu Apr 10 09:04:38 2008
New Revision: 53649

Modified:
   lxml/branch/lxml-2.0/CHANGES.txt
   lxml/branch/lxml-2.0/src/lxml/iterparse.pxi
   lxml/branch/lxml-2.0/src/lxml/tests/test_elementtree.py
Log:
trunk merge -r 53647:53648: iterparse crash fix

Modified: lxml/branch/lxml-2.0/CHANGES.txt
==============================================================================
--- lxml/branch/lxml-2.0/CHANGES.txt	(original)
+++ lxml/branch/lxml-2.0/CHANGES.txt	Thu Apr 10 09:04:38 2008
@@ -11,6 +11,8 @@
 Bugs fixed
 ----------
 
+* Crash bug in iterparse when moving elements into other documents.
+
 * HTML elements' ``.cssselect()`` method was broken.
 
 * ``ElementTree.find*()`` didn't accept QName objects.

Modified: lxml/branch/lxml-2.0/src/lxml/iterparse.pxi
==============================================================================
--- lxml/branch/lxml-2.0/src/lxml/iterparse.pxi	(original)
+++ lxml/branch/lxml-2.0/src/lxml/iterparse.pxi	Thu Apr 10 09:04:38 2008
@@ -325,6 +325,7 @@
                              None, filename, encoding)
 
         context = <_IterparseContext>self._getPushParserContext()
+        __GLOBAL_PARSER_CONTEXT.initParserDict(context._c_ctxt)
         context._setEventFilter(events, tag)
         context.prepare()
         # parser will not be unlocked - no other methods supported

Modified: lxml/branch/lxml-2.0/src/lxml/tests/test_elementtree.py
==============================================================================
--- lxml/branch/lxml-2.0/src/lxml/tests/test_elementtree.py	(original)
+++ lxml/branch/lxml-2.0/src/lxml/tests/test_elementtree.py	Thu Apr 10 09:04:38 2008
@@ -2567,6 +2567,19 @@
             [1,2,1,4],
             counts)
 
+    def test_iterparse_move_elements(self):
+        iterparse = self.etree.iterparse
+        f = StringIO('<a><b><d/></b><c/></a>')
+
+        for event, node in etree.iterparse(f): pass
+
+        root = etree.Element('new_root', {})
+        root[:] = node[:]
+
+        self.assertEquals(
+            ['b', 'c'],
+            [ el.tag for el in root ])
+
     def test_parse_file(self):
         parse = self.etree.parse
         # from file


More information about the lxml-checkins mailing list