Skip to content

Commit c86eb4d

Browse files
gh-139210: Fix use-after-free in xml.etree.ElementTree.iterparse() (GH-139211)
1 parent f752fde commit c86eb4d

File tree

3 files changed

+4
-1
lines changed

3 files changed

+4
-1
lines changed

Lib/test/test_xml_etree.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1749,6 +1749,8 @@ def __next__(self):
17491749
def test_unknown_event(self):
17501750
with self.assertRaises(ValueError):
17511751
ET.XMLPullParser(events=('start', 'end', 'bogus'))
1752+
with self.assertRaisesRegex(ValueError, "unknown event 'bogus'"):
1753+
ET.XMLPullParser(events=(x.decode() for x in (b'start', b'end', b'bogus')))
17521754

17531755
@unittest.skipIf(pyexpat.version_info < (2, 6, 0),
17541756
f'Expat {pyexpat.version_info} does not '
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix use-after-free when reporting unknown event in :func:`xml.etree.ElementTree.iterparse`. Patch by Ken Jin.

Modules/_elementtree.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4214,8 +4214,8 @@ _elementtree_XMLParser__setevents_impl(XMLParserObject *self,
42144214
(XML_ProcessingInstructionHandler) expat_pi_handler
42154215
);
42164216
} else {
4217-
Py_DECREF(events_seq);
42184217
PyErr_Format(PyExc_ValueError, "unknown event '%s'", event_name);
4218+
Py_DECREF(events_seq);
42194219
return NULL;
42204220
}
42214221
}

0 commit comments

Comments
 (0)