mirror of
https://github.com/AdaCore/cpython.git
synced 2026-02-12 12:57:15 -08:00
bpo-35502: Fix reference leaks in ElementTree.TreeBuilder. (GH-11170)
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
# 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):
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user