Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Lib/test/test_pyexpat.py
Original file line number Diff line number Diff line change
Expand Up @@ -1045,6 +1045,13 @@ def test_parent_parser_outlives_its_subparsers__chain(self):
del parser
del subparser

def test_subparser_inherits_reparse_deferral(self):
for enabled in (True, False):
parser = expat.ParserCreate()
parser.SetReparseDeferralEnabled(enabled)
subparser = parser.ExternalEntityParserCreate(None)
self.assertEqual(subparser.GetReparseDeferralEnabled(), enabled)


class ExternalEntityParserCreateErrorTest(unittest.TestCase):
"""ExternalEntityParserCreate error paths should not crash or leak
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fix :meth:`!ExternalEntityParserCreate` not propagating the reparse-deferral
setting to the subparser, which left :meth:`!GetReparseDeferralEnabled`
returning an uninitialized value. Patch by tonghuaroot.
1 change: 1 addition & 0 deletions Modules/pyexpat.c
Original file line number Diff line number Diff line change
Expand Up @@ -1118,6 +1118,7 @@ pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self,
new_parser->specified_attributes = self->specified_attributes;
new_parser->in_callback = 0;
new_parser->ns_prefixes = self->ns_prefixes;
new_parser->reparse_deferral_enabled = self->reparse_deferral_enabled;
new_parser->itself = XML_ExternalEntityParserCreate(self->itself, context,
encoding);
// The new subparser will make use of the parent XML_Parser inside of Expat.
Expand Down
Loading