From: Seth Michael Larson Date: Wed, 21 Feb 2024 11:22:55 +0000 (-0600) Subject: [3.9] Fix tests for XMLPullParser with Expat 2.6.0 (GH-115133) (GH-115535) X-Git-Tag: archive/raspbian/3.9.2-1+rpi1+deb11u2^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=948f71cb2e804f621ed166b6d51b3b9ce3422740;p=python3.9.git [3.9] Fix tests for XMLPullParser with Expat 2.6.0 (GH-115133) (GH-115535) Feeding the parser by too small chunks defers parsing to prevent CVE-2023-52425. Future versions of Expat may be more reactive. (cherry picked from commit 4a08e7b3431cd32a0daf22a33421cd3035343dc4) Co-authored-by: Serhiy Storchaka Gbp-Pq: Name 0029-3.9-Fix-tests-for-XMLPullParser-with-Expat-2.6.0-GH-.patch --- diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index 2ac643f..913fa5d 100644 --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -14,6 +14,7 @@ import locale import operator import os import pickle +import pyexpat import sys import textwrap import types @@ -1375,28 +1376,29 @@ class XMLPullParserTest(unittest.TestCase): self.assertEqual([(action, elem.tag) for action, elem in events], expected) - def test_simple_xml(self): - for chunk_size in (None, 1, 5): - with self.subTest(chunk_size=chunk_size): - parser = ET.XMLPullParser() - self.assert_event_tags(parser, []) - self._feed(parser, "\n", chunk_size) - self.assert_event_tags(parser, []) - self._feed(parser, - "\n text\n", chunk_size) - self.assert_event_tags(parser, [('end', 'element')]) - self._feed(parser, "texttail\n", chunk_size) - self._feed(parser, "\n", chunk_size) - self.assert_event_tags(parser, [ - ('end', 'element'), - ('end', 'empty-element'), - ]) - self._feed(parser, "\n", chunk_size) - self.assert_event_tags(parser, [('end', 'root')]) - self.assertIsNone(parser.close()) + def test_simple_xml(self, chunk_size=None): + parser = ET.XMLPullParser() + self.assert_event_tags(parser, []) + self._feed(parser, "\n", chunk_size) + self.assert_event_tags(parser, []) + self._feed(parser, + "\n text\n", chunk_size) + self.assert_event_tags(parser, [('end', 'element')]) + self._feed(parser, "texttail\n", chunk_size) + self._feed(parser, "\n", chunk_size) + self.assert_event_tags(parser, [ + ('end', 'element'), + ('end', 'empty-element'), + ]) + self._feed(parser, "\n", chunk_size) + self.assert_event_tags(parser, [('end', 'root')]) + self.assertIsNone(parser.close()) + + def test_simple_xml_chunk_22(self): + self.test_simple_xml(chunk_size=22) def test_feed_while_iterating(self): parser = ET.XMLPullParser()