Skip to content

Commit 1c72265

Browse files
[3.12] gh-117187: Fix XML tests for vanilla Expat <2.6.0 (GH-117203) (GH-117244)
gh-117187: Fix XML tests for vanilla Expat <2.6.0 (GH-117203) This fixes XML unittest fallout from the #115398 security fix. When configured using `--with-system-expat` on systems with older pre 2.6.0 versions of libexpat, our unittests were failing. * sax|etree: Simplify Expat version guard where simplifiable Idea by Matěj Cepl * sax|etree: Fix reparse deferral tests for vanilla Expat <2.6.0 This *does not fix* the case of distros with an older version of libexpat with the 2.6.0 feature backported as a security fix. (Ubuntu is a known example of this with its libexpat1 2.5.0-2ubunutu0.1 package) (cherry picked from commit 9f74e86) Co-authored-by: Sebastian Pipping <sebastian@pipping.org>
1 parent 2f9caaf commit 1c72265

File tree

3 files changed

+9
-9
lines changed

3 files changed

+9
-9
lines changed

Lib/test/test_sax.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1215,10 +1215,10 @@ def test_expat_incremental_reset(self):
12151215

12161216
self.assertEqual(result.getvalue(), start + b"<doc>text</doc>")
12171217

1218+
@unittest.skipIf(pyexpat.version_info < (2, 6, 0),
1219+
f'Expat {pyexpat.version_info} does not '
1220+
'support reparse deferral')
12181221
def test_flush_reparse_deferral_enabled(self):
1219-
if pyexpat.version_info < (2, 6, 0):
1220-
self.skipTest(f'Expat {pyexpat.version_info} does not support reparse deferral')
1221-
12221222
result = BytesIO()
12231223
xmlgen = XMLGenerator(result)
12241224
parser = create_parser()
@@ -1251,8 +1251,8 @@ def test_flush_reparse_deferral_disabled(self):
12511251

12521252
if pyexpat.version_info >= (2, 6, 0):
12531253
parser._parser.SetReparseDeferralEnabled(False)
1254+
self.assertEqual(result.getvalue(), start) # i.e. no elements started
12541255

1255-
self.assertEqual(result.getvalue(), start) # i.e. no elements started
12561256
self.assertFalse(parser._parser.GetReparseDeferralEnabled())
12571257

12581258
parser.flush()

Lib/test/test_xml_etree.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -1627,11 +1627,10 @@ def test_unknown_event(self):
16271627
with self.assertRaises(ValueError):
16281628
ET.XMLPullParser(events=('start', 'end', 'bogus'))
16291629

1630+
@unittest.skipIf(pyexpat.version_info < (2, 6, 0),
1631+
f'Expat {pyexpat.version_info} does not '
1632+
'support reparse deferral')
16301633
def test_flush_reparse_deferral_enabled(self):
1631-
if pyexpat.version_info < (2, 6, 0):
1632-
self.skipTest(f'Expat {pyexpat.version_info} does not '
1633-
'support reparse deferral')
1634-
16351634
parser = ET.XMLPullParser(events=('start', 'end'))
16361635

16371636
for chunk in ("<doc", ">"):
@@ -1663,8 +1662,8 @@ def test_flush_reparse_deferral_disabled(self):
16631662
self.skipTest(f'XMLParser.(Get|Set)ReparseDeferralEnabled '
16641663
'methods not available in C')
16651664
parser._parser._parser.SetReparseDeferralEnabled(False)
1665+
self.assert_event_tags(parser, []) # i.e. no elements started
16661666

1667-
self.assert_event_tags(parser, []) # i.e. no elements started
16681667
if ET is pyET:
16691668
self.assertFalse(parser._parser._parser.GetReparseDeferralEnabled())
16701669

Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix XML tests for vanilla Expat <2.6.0.

0 commit comments

Comments
 (0)