]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.8] gh-117187: Fix XML tests for vanilla Expat <2.6.0 (GH-117203) (#117248)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 27 Mar 2024 13:55:40 +0000 (14:55 +0100)
committerGitHub <noreply@github.com>
Wed, 27 Mar 2024 13:55:40 +0000 (14:55 +0100)
This fixes XML unittest fallout from the https://github.com/python/cpython/issues/115398 security fix.  When configured using `--with-system-expat` on systems with older pre 2.6.0 versions of libexpat, our unittests were failing.

(cherry picked from commit 9f74e86c78853c101a23e938f8e32ea838d8f62e)

Co-authored-by: Sebastian Pipping <sebastian@pipping.org>
Lib/test/test_sax.py
Lib/test/test_xml_etree.py
Misc/NEWS.d/next/Tests/2024-03-24-23-49-25.gh-issue-117187.eMLT5n.rst [new file with mode: 0644]

index 2f1f23b719baf29422b6341b4c3d17b2df746543..a5d0544b099ef435d7398e823bf4ddee291c2e08 100644 (file)
@@ -1207,10 +1207,10 @@ class ExpatReaderTest(XmlTestBase):
 
         self.assertEqual(result.getvalue(), start + b"<doc>text</doc>")
 
+    @unittest.skipIf(pyexpat.version_info < (2, 6, 0),
+                     f'Expat {pyexpat.version_info} does not '
+                     'support reparse deferral')
     def test_flush_reparse_deferral_enabled(self):
-        if pyexpat.version_info < (2, 6, 0):
-            self.skipTest(f'Expat {pyexpat.version_info} does not support reparse deferral')
-
         result = BytesIO()
         xmlgen = XMLGenerator(result)
         parser = create_parser()
@@ -1243,8 +1243,8 @@ class ExpatReaderTest(XmlTestBase):
 
         if pyexpat.version_info >= (2, 6, 0):
             parser._parser.SetReparseDeferralEnabled(False)
+            self.assertEqual(result.getvalue(), start)  # i.e. no elements started
 
-        self.assertEqual(result.getvalue(), start)  # i.e. no elements started
         self.assertFalse(parser._parser.GetReparseDeferralEnabled())
 
         parser.flush()
index 1fbd8081386184a013d6c90f08352f37ec5695d3..00c603b6eac83e3a594d3f44c441aa248a53ceee 100644 (file)
@@ -1494,11 +1494,10 @@ class XMLPullParserTest(unittest.TestCase):
         with self.assertRaises(ValueError):
             ET.XMLPullParser(events=('start', 'end', 'bogus'))
 
+    @unittest.skipIf(pyexpat.version_info < (2, 6, 0),
+                     f'Expat {pyexpat.version_info} does not '
+                     'support reparse deferral')
     def test_flush_reparse_deferral_enabled(self):
-        if pyexpat.version_info < (2, 6, 0):
-            self.skipTest(f'Expat {pyexpat.version_info} does not '
-                          'support reparse deferral')
-
         parser = ET.XMLPullParser(events=('start', 'end'))
 
         for chunk in ("<doc", ">"):
@@ -1530,8 +1529,8 @@ class XMLPullParserTest(unittest.TestCase):
                 self.skipTest(f'XMLParser.(Get|Set)ReparseDeferralEnabled '
                               'methods not available in C')
             parser._parser._parser.SetReparseDeferralEnabled(False)
+            self.assert_event_tags(parser, [])  # i.e. no elements started
 
-        self.assert_event_tags(parser, [])  # i.e. no elements started
         if ET is pyET:
             self.assertFalse(parser._parser._parser.GetReparseDeferralEnabled())
 
diff --git a/Misc/NEWS.d/next/Tests/2024-03-24-23-49-25.gh-issue-117187.eMLT5n.rst b/Misc/NEWS.d/next/Tests/2024-03-24-23-49-25.gh-issue-117187.eMLT5n.rst
new file mode 100644 (file)
index 0000000..0c0b0e0
--- /dev/null
@@ -0,0 +1 @@
+Fix XML tests for vanilla Expat <2.6.0.