https://github.com/python/cpython/commit/9f74e86c78853c101a23e938f8e32ea838d8f62e
commit: 9f74e86c78853c101a23e938f8e32ea838d8f62e
branch: main
author: Sebastian Pipping <[email protected]>
committer: gpshead <[email protected]>
date: 2024-03-25T18:48:27-07:00
summary:

gh-117187: Fix XML tests for vanilla Expat <2.6.0 (GH-117203)

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.

* 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)

files:
A Misc/NEWS.d/next/Tests/2024-03-24-23-49-25.gh-issue-117187.eMLT5n.rst
M Lib/test/test_sax.py
M Lib/test/test_xml_etree.py

diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index 97e96668f85c8a..9b3014a94a081e 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -1215,10 +1215,10 @@ def test_expat_incremental_reset(self):
 
         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()
@@ -1251,8 +1251,8 @@ def test_flush_reparse_deferral_disabled(self):
 
         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()
diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py
index 3f01a79cc05efd..bae61f754e75f5 100644
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -1707,11 +1707,10 @@ def test_unknown_event(self):
         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", ">"):
@@ -1743,8 +1742,8 @@ def test_flush_reparse_deferral_disabled(self):
                 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
index 00000000000000..0c0b0e0f443396
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2024-03-24-23-49-25.gh-issue-117187.eMLT5n.rst
@@ -0,0 +1 @@
+Fix XML tests for vanilla Expat <2.6.0.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to