Skip to content

Commit 9086d9b

Browse files
[3.15] gh-154738: Propagate reparse-deferral setting to pyexpat subparsers (GH-154739) (GH-154990)
(cherry picked from commit 7d76013) Co-authored-by: tonghuaroot (童话) <tonghuaroot@gmail.com>
1 parent 476fb09 commit 9086d9b

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)