Skip to content

Commit ff2aab6

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 c19b4a6 commit ff2aab6

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
@@ -996,6 +996,13 @@ def test_parent_parser_outlives_its_subparsers__chain(self):
996996
del parser
997997
del subparser
998998

999+
def test_subparser_inherits_reparse_deferral(self):
1000+
for enabled in (True, False):
1001+
parser = expat.ParserCreate()
1002+
parser.SetReparseDeferralEnabled(enabled)
1003+
subparser = parser.ExternalEntityParserCreate(None)
1004+
self.assertEqual(subparser.GetReparseDeferralEnabled(), enabled)
1005+
9991006

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

0 commit comments

Comments
 (0)