Commit d2a75c67 authored by Serhiy Storchaka's avatar Serhiy Storchaka Committed by GitHub

bpo-35502: Fix reference leaks in ElementTree.TreeBuilder. (GH-11170)

parent 60875db2
# xml.etree test for cElementTree
import io
import struct
from test import support
from test.support import import_fresh_module
......@@ -133,6 +134,26 @@ class MiscTests(unittest.TestCase):
self.assertEqual(len(elem), 1)
self.assertEqual(elem[0].tag, 'child')
def test_iterparse_leaks(self):
# Test reference leaks in TreeBuilder (issue #35502).
# The test is written to be executed in the hunting reference leaks
# mode.
XML = '<a></a></b>'
parser = cET.iterparse(io.StringIO(XML))
next(parser)
del parser
support.gc_collect()
def test_xmlpullparser_leaks(self):
# Test reference leaks in TreeBuilder (issue #35502).
# The test is written to be executed in the hunting reference leaks
# mode.
XML = '<a></a></b>'
parser = cET.XMLPullParser()
parser.feed(XML)
del parser
support.gc_collect()
@unittest.skipUnless(cET, 'requires _elementtree')
class TestAliasWorking(unittest.TestCase):
......
Fixed reference leaks in :class:`xml.etree.ElementTree.TreeBuilder` in case
of unfinished building of the tree (in particular when an error was raised
during parsing XML).
......@@ -2447,6 +2447,11 @@ _elementtree_TreeBuilder___init___impl(TreeBuilderObject *self,
static int
treebuilder_gc_traverse(TreeBuilderObject *self, visitproc visit, void *arg)
{
Py_VISIT(self->end_ns_event_obj);
Py_VISIT(self->start_ns_event_obj);
Py_VISIT(self->end_event_obj);
Py_VISIT(self->start_event_obj);
Py_VISIT(self->events_append);
Py_VISIT(self->root);
Py_VISIT(self->this);
Py_VISIT(self->last);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment