Skip to content

Commit 7b6ea30

Browse files
tonghuarootmiss-islington
authored andcommitted
gh-154738: Propagate reparse-deferral setting to pyexpat subparsers (GH-154739)
(cherry picked from commit 7d76013) Co-authored-by: tonghuaroot (童话) <tonghuaroot@gmail.com>
1 parent 0248ea9 commit 7b6ea30

3 files changed

Lines changed: 11 additions & 0 deletions

File tree

Lib/test/test_pyexpat.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,13 @@ def test_parent_parser_outlives_its_subparsers__chain(self):
956956
del parser
957957
del subparser
958958

959+
def test_subparser_inherits_reparse_deferral(self):
960+
for enabled in (True, False):
961+
parser = expat.ParserCreate()
962+
parser.SetReparseDeferralEnabled(enabled)
963+
subparser = parser.ExternalEntityParserCreate(None)
964+
self.assertEqual(subparser.GetReparseDeferralEnabled(), enabled)
965+
959966

960967
class ExternalEntityParserCreateErrorTest(unittest.TestCase):
961968
"""ExternalEntityParserCreate error paths should not crash or leak
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Fix :meth:`!ExternalEntityParserCreate` not propagating the reparse-deferral
2+
setting to the subparser, which left :meth:`!GetReparseDeferralEnabled`
3+
returning an uninitialized value. Patch by tonghuaroot.

Modules/pyexpat.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1084,6 +1084,7 @@ pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self,
10841084
new_parser->specified_attributes = self->specified_attributes;
10851085
new_parser->in_callback = 0;
10861086
new_parser->ns_prefixes = self->ns_prefixes;
1087+
new_parser->reparse_deferral_enabled = self->reparse_deferral_enabled;
10871088
new_parser->itself = XML_ExternalEntityParserCreate(self->itself, context,
10881089
encoding);
10891090
// The new subparser will make use of the parent XML_Parser inside of Expat.

0 commit comments

Comments
 (0)