Skip to content

Commit a7f76ee

Browse files
committed
gh-154738: Propagate reparse-deferral setting to pyexpat subparsers
1 parent 5afbb60 commit a7f76ee

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
@@ -1045,6 +1045,13 @@ def test_parent_parser_outlives_its_subparsers__chain(self):
10451045
del parser
10461046
del subparser
10471047

1048+
def test_subparser_inherits_reparse_deferral(self):
1049+
for enabled in (True, False):
1050+
parser = expat.ParserCreate()
1051+
parser.SetReparseDeferralEnabled(enabled)
1052+
subparser = parser.ExternalEntityParserCreate(None)
1053+
self.assertEqual(subparser.GetReparseDeferralEnabled(), enabled)
1054+
10481055

10491056
class ExternalEntityParserCreateErrorTest(unittest.TestCase):
10501057
"""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
@@ -1118,6 +1118,7 @@ pyexpat_xmlparser_ExternalEntityParserCreate_impl(xmlparseobject *self,
11181118
new_parser->specified_attributes = self->specified_attributes;
11191119
new_parser->in_callback = 0;
11201120
new_parser->ns_prefixes = self->ns_prefixes;
1121+
new_parser->reparse_deferral_enabled = self->reparse_deferral_enabled;
11211122
new_parser->itself = XML_ExternalEntityParserCreate(self->itself, context,
11221123
encoding);
11231124
// The new subparser will make use of the parent XML_Parser inside of Expat.

0 commit comments

Comments
 (0)