Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python38 for openSUSE:Factory 
checked in at 2024-09-22 11:06:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python38 (Old)
 and      /work/SRC/openSUSE:Factory/.python38.new.29891 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python38"

Sun Sep 22 11:06:19 2024 rev:55 rq:1202275 version:3.8.20

Changes:
--------
--- /work/SRC/openSUSE:Factory/python38/python38.changes        2024-09-17 
18:19:09.277384509 +0200
+++ /work/SRC/openSUSE:Factory/.python38.new.29891/python38.changes     
2024-09-22 11:06:39.574186755 +0200
@@ -1,0 +2,14 @@
+Fri Sep 20 22:19:12 UTC 2024 - Matej Cepl <mc...@cepl.eu>
+
+- Add sphinx-802.patch to overcome working both with the most
+  recent and older Sphinx versions.
+
+-------------------------------------------------------------------
+Thu Sep 19 00:14:25 UTC 2024 - Matej Cepl <mc...@cepl.eu>
+
+- Update CVE-2023-52425-libexpat-2.6.0-backport.patch
+  so that it uses features sniffing, not just
+  comparing version number. Include also
+  support-expat-CVE-2022-25236-patched.patch. 
+
+-------------------------------------------------------------------

Old:
----
  support-expat-CVE-2022-25236-patched.patch

New:
----
  CVE-2023-52425-libexpat-2.6.0-backport.patch
  sphinx-802.patch

BETA DEBUG BEGIN:
  Old:  comparing version number. Include also
  support-expat-CVE-2022-25236-patched.patch. 
BETA DEBUG END:

BETA DEBUG BEGIN:
  New:
- Update CVE-2023-52425-libexpat-2.6.0-backport.patch
  so that it uses features sniffing, not just
  New:
- Add sphinx-802.patch to overcome working both with the most
  recent and older Sphinx versions.
BETA DEBUG END:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python38.spec ++++++
--- /var/tmp/diff_new_pack.JmQzmm/_old  2024-09-22 11:06:43.482348175 +0200
+++ /var/tmp/diff_new_pack.JmQzmm/_new  2024-09-22 11:06:43.506349167 +0200
@@ -174,9 +174,11 @@
 # PATCH-FIX-UPSTREAM bpo34990-2038-problem-compileall.patch 
gh#python/cpython#79171 mc...@suse.com
 # Make compileall.py compatible with year 2038
 Patch34:        bpo34990-2038-problem-compileall.patch
-# PATCH-FIX-UPSTREAM gh#python/cpython#90967 gh#python/cpython#93900  
mc...@suse.com
-# NOTE: SUSE version of expat 2.4.4 is patched in SUSE for CVE-2022-25236
-Patch36:        support-expat-CVE-2022-25236-patched.patch
+# PATCH-FIX-OPENSUSE CVE-2023-52425-libexpat-2.6.0-backport.patch
+# This problem on libexpat is patched on SLE without version
+# update, this patch changes the tests to match the libexpat provided
+# by SUSE
+Patch36:        CVE-2023-52425-libexpat-2.6.0-backport.patch
 # PATCH-FIX-OPENSUSE platlibdir-in-sys.patch bsc#1204395
 Patch37:        platlibdir-in-sys.patch
 # PATCH-FIX-UPSTREAM 98437-sphinx.locale._-as-gettext-in-pyspecific.patch 
gh#python/cpython#98366 mc...@suse.com
@@ -194,6 +196,9 @@
 # PATCH-FIX-UPSTREAM gh120226-fix-sendfile-test-kernel-610.patch 
gh#python/cpython#120226 mc...@suse.com
 # Fix test_sendfile_close_peer_in_the_middle_of_receiving on Linux >= 6.10 
(GH-120227)
 Patch50:        gh120226-fix-sendfile-test-kernel-610.patch
+# PATCH-FIX-UPSTREAM sphinx-802.patch mc...@suse.com
+# status_iterator method moved between the Sphinx versions
+Patch51:        sphinx-802.patch
 
 BuildRequires:  autoconf-archive
 BuildRequires:  automake
@@ -468,6 +473,7 @@
 %patch -p1 -P 46
 %patch -p1 -P 48
 %patch -p1 -P 50
+%patch -p1 -P 51
 
 # drop Autoconf version requirement
 sed -i 's/^AC_PREREQ/dnl AC_PREREQ/' configure.ac

++++++ CVE-2023-52425-libexpat-2.6.0-backport.patch ++++++
>From d7133c7e0f91b14c390aa30a5689c353ef754fb6 Mon Sep 17 00:00:00 2001
From: Sebastian Pipping <sebast...@pipping.org>
Date: Wed, 7 Feb 2024 15:32:45 +0100
Subject: [PATCH] Fix etree XMLPullParser tests for Expat >=2.6.0 with reparse
 deferral

Combined with gh#python/cpython!31453
bpo-46811: Make test suite support Expat >=2.4.5 (GH-31453)

Curly brackets were never allowed in namespace URIs
according to RFC 3986, and so-called namespace-validating
XML parsers have the right to reject them a invalid URIs.

libexpat >=2.4.5 has become strcter in that regard due to
related security issues; with ET.XML instantiating a
namespace-aware parser under the hood, this test has no
future in CPython.

References:
- https://datatracker.ietf.org/doc/html/rfc3968
- https://www.w3.org/TR/xml-names/

Also, test_minidom.py: Support Expat >=2.4.5
(cherry picked from commit 2cae93832f46b245847bdc252456ddf7742ef45e)

Co-authored-by: Sebastian Pipping <sebast...@pipping.org>
Fixes: gh#python/cpython#115133
From-PR: gh#python/cpython!115138
Patch: CVE-2023-52425-libexpat-2.6.0-backport.patch
---
 Lib/test/support/__init__.py                                          |   15 ++
 Lib/test/test_minidom.py                                              |   22 
+--
 Lib/test/test_pyexpat.py                                              |   61 
+++++++++-
 Lib/test/test_sax.py                                                  |   54 
++++++++
 Lib/test/test_xml_etree.py                                            |   13 +-
 Misc/NEWS.d/next/Library/2022-02-20-21-03-31.bpo-46811.8BxgdQ.rst     |    1 
 Misc/NEWS.d/next/Tests/2024-02-07-15-49-37.gh-issue-115133.WBajNr.rst |    1 
 7 files changed, 146 insertions(+), 21 deletions(-)
 create mode 100644 
Misc/NEWS.d/next/Library/2022-02-20-21-03-31.bpo-46811.8BxgdQ.rst
 create mode 100644 
Misc/NEWS.d/next/Tests/2024-02-07-15-49-37.gh-issue-115133.WBajNr.rst

--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -23,6 +23,7 @@ import platform
 import re
 import shutil
 import socket
+import pyexpat
 import stat
 import struct
 import subprocess
@@ -119,9 +120,11 @@ __all__ = [
     "run_with_locale", "swap_item",
     "swap_attr", "Matcher", "set_memlimit", "SuppressCrashReport", "sortdict",
     "run_with_tz", "PGO", "missing_compiler_executable", "fd_count",
-    "ALWAYS_EQ", "LARGEST", "SMALLEST"
+    "ALWAYS_EQ", "LARGEST", "SMALLEST",
+    "fails_with_expat_2_6_0", "is_expat_2_6_0"
     ]
 
+
 class Error(Exception):
     """Base class for regression test exceptions."""
 
@@ -3411,3 +3414,13 @@ def adjust_int_max_str_digits(max_digits
         yield
     finally:
         sys.set_int_max_str_digits(current)
+
+
+@functools.lru_cache(maxsize=32)
+def _is_expat_2_6_0():
+    return hasattr(pyexpat.ParserCreate(), 'SetReparseDeferralEnabled')
+is_expat_2_6_0 = _is_expat_2_6_0()
+
+fails_with_expat_2_6_0 = (unittest.expectedFailure
+                          if is_expat_2_6_0
+                          else lambda test: test)
--- a/Lib/test/test_minidom.py
+++ b/Lib/test/test_minidom.py
@@ -1149,13 +1149,11 @@ class MinidomTest(unittest.TestCase):
 
         # Verify that character decoding errors raise exceptions instead
         # of crashing
-        if pyexpat.version_info >= (2, 4, 5):
-            self.assertRaises(ExpatError, parseString,
-                    b'<fran\xe7ais></fran\xe7ais>')
-            self.assertRaises(ExpatError, parseString,
-                    b'<franais>Comment \xe7a va ? Tr\xe8s bien ?</franais>')
-        else:
-            self.assertRaises(UnicodeDecodeError, parseString,
+        # It doesn’t make any sense to insist on the exact text of the
+        # error message, or even the exact Exception … it is enough that
+        # the error has been discovered.
+        with self.assertRaises((UnicodeDecodeError, ExpatError)):
+            parseString(
                 b'<fran\xe7ais>Comment \xe7a va ? Tr\xe8s bien 
?</fran\xe7ais>')
 
         doc.unlink()
@@ -1601,12 +1599,10 @@ class MinidomTest(unittest.TestCase):
         self.confirm(doc2.namespaceURI == xml.dom.EMPTY_NAMESPACE)
 
     def testExceptionOnSpacesInXMLNSValue(self):
-        if pyexpat.version_info >= (2, 4, 5):
-            context = self.assertRaisesRegex(ExpatError, 'syntax error')
-        else:
-            context = self.assertRaisesRegex(ValueError, 'Unsupported syntax')
-
-        with context:
+        # It doesn’t make any sense to insist on the exact text of the
+        # error message, or even the exact Exception … it is enough that
+        # the error has been discovered.
+        with self.assertRaises((ExpatError, ValueError)):
             parseString('<element xmlns:abc="http:abc.com/de f g/hi/j 
k"><abc:foo /></element>')
 
     def testDocRemoveChild(self):
--- a/Lib/test/test_pyexpat.py
+++ b/Lib/test/test_pyexpat.py
@@ -11,7 +11,7 @@ import traceback
 from xml.parsers import expat
 from xml.parsers.expat import errors
 
-from test.support import sortdict
+from test.support import sortdict, is_expat_2_6_0
 
 
 class SetAttributeTest(unittest.TestCase):
@@ -778,6 +778,65 @@ class ReparseDeferralTest(unittest.TestC
 
         for chunk in (b'<doc', b'/>'):
             parser.Parse(chunk, False)
+
+        # The key test: Have handlers already fired?  Expecting: yes.
+        self.assertEqual(started, ['doc'])
+
+
+class ReparseDeferralTest(unittest.TestCase):
+    def test_getter_setter_round_trip(self):
+        if not is_expat_2_6_0:
+            self.skipTest("Linked libexpat doesn't support reparse deferral")
+
+        parser = expat.ParserCreate()
+        enabled = (expat.version_info >= (2, 6, 0))
+
+        self.assertIs(parser.GetReparseDeferralEnabled(), enabled)
+        parser.SetReparseDeferralEnabled(False)
+        self.assertIs(parser.GetReparseDeferralEnabled(), False)
+        parser.SetReparseDeferralEnabled(True)
+        self.assertIs(parser.GetReparseDeferralEnabled(), enabled)
+
+    def test_reparse_deferral_enabled(self):
+        if not is_expat_2_6_0:
+            self.skipTest("Linked libexpat doesn't support reparse deferral")
+
+        started = []
+
+        def start_element(name, _):
+            started.append(name)
+
+        parser = expat.ParserCreate()
+        parser.StartElementHandler = start_element
+        self.assertTrue(parser.GetReparseDeferralEnabled())
+
+        for chunk in (b'<doc', b'/>'):
+            parser.Parse(chunk, False)
+
+        # The key test: Have handlers already fired?  Expecting: no.
+        self.assertEqual(started, [])
+
+        parser.Parse(b'', True)
+
+        self.assertEqual(started, ['doc'])
+
+    def test_reparse_deferral_disabled(self):
+        if not is_expat_2_6_0:
+            self.skipTest("Linked libexpat doesn't support reparse deferral")
+
+        started = []
+
+        def start_element(name, _):
+            started.append(name)
+
+        parser = expat.ParserCreate()
+        parser.StartElementHandler = start_element
+        if is_expat_2_6_0:
+            parser.SetReparseDeferralEnabled(False)
+            self.assertFalse(parser.GetReparseDeferralEnabled())
+
+        for chunk in (b'<doc', b'/>'):
+            parser.Parse(chunk, False)
 
         # The key test: Have handlers already fired?  Expecting: yes.
         self.assertEqual(started, ['doc'])
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -22,7 +22,7 @@ import pyexpat
 import shutil
 from urllib.error import URLError
 from test import support
-from test.support import findfile, run_unittest, FakePath, TESTFN
+from test.support import findfile, run_unittest, FakePath, TESTFN, 
is_expat_2_6_0
 
 TEST_XMLFILE = findfile("test.xml", subdir="xmltestdata")
 TEST_XMLFILE_OUT = findfile("test.xml.out", subdir="xmltestdata")
@@ -1247,6 +1247,58 @@ class ExpatReaderTest(XmlTestBase):
 
         self.assertFalse(parser._parser.GetReparseDeferralEnabled())
 
+        parser.flush()
+
+        self.assertFalse(parser._parser.GetReparseDeferralEnabled())
+        self.assertEqual(result.getvalue(), start + b"<doc>")
+
+        parser.feed("</doc>")
+        parser.close()
+
+        self.assertEqual(result.getvalue(), start + b"<doc></doc>")
+
+    def test_flush_reparse_deferral_enabled(self):
+        if not is_expat_2_6_0:
+            self.skipTest("Linked libexpat doesn't support reparse deferral")
+
+        result = BytesIO()
+        xmlgen = XMLGenerator(result)
+        parser = create_parser()
+        parser.setContentHandler(xmlgen)
+
+        for chunk in ("<doc", ">"):
+            parser.feed(chunk)
+
+        self.assertEqual(result.getvalue(), start)  # i.e. no elements started
+        self.assertTrue(parser._parser.GetReparseDeferralEnabled())
+
+        parser.flush()
+
+        self.assertTrue(parser._parser.GetReparseDeferralEnabled())
+        self.assertEqual(result.getvalue(), start + b"<doc>")
+
+        parser.feed("</doc>")
+        parser.close()
+
+        self.assertEqual(result.getvalue(), start + b"<doc></doc>")
+
+    def test_flush_reparse_deferral_disabled(self):
+        if not is_expat_2_6_0:
+            self.skipTest("Linked libexpat doesn't support reparse deferral")
+
+        result = BytesIO()
+        xmlgen = XMLGenerator(result)
+        parser = create_parser()
+        parser.setContentHandler(xmlgen)
+
+        for chunk in ("<doc", ">"):
+            parser.feed(chunk)
+
+        parser._parser.SetReparseDeferralEnabled(False)
+        self.assertEqual(result.getvalue(), start)  # i.e. no elements started
+
+        self.assertFalse(parser._parser.GetReparseDeferralEnabled())
+
         parser.flush()
 
         self.assertFalse(parser._parser.GetReparseDeferralEnabled())
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -25,7 +25,8 @@ import weakref
 from functools import partial
 from itertools import product, islice
 from test import support
-from test.support import TESTFN, findfile, import_fresh_module, gc_collect, 
swap_attr
+from test.support import (TESTFN, findfile, import_fresh_module,
+                          gc_collect, swap_attr, is_expat_2_6_0, 
fails_with_expat_2_6_0)
 
 # pyET is the pure-Python implementation.
 #
@@ -1271,6 +1272,7 @@ class XMLPullParserTest(unittest.TestCas
                          expected)
 
     def test_simple_xml(self, chunk_size=None, flush=False):
+        expected_events = []
         parser = ET.XMLPullParser()
         self.assert_event_tags(parser, [])
         self._feed(parser, "<!-- comment -->\n", chunk_size, flush)
@@ -1280,16 +1282,17 @@ class XMLPullParserTest(unittest.TestCas
                    chunk_size, flush)
         self.assert_event_tags(parser, [])
         self._feed(parser, ">\n", chunk_size, flush)
-        self.assert_event_tags(parser, [('end', 'element')])
+        expected_events += [('end', 'element')]
         self._feed(parser, "<element>text</element>tail\n", chunk_size, flush)
         self._feed(parser, "<empty-element/>\n", chunk_size, flush)
-        self.assert_event_tags(parser, [
+        expected_events += [
             ('end', 'element'),
             ('end', 'empty-element'),
-            ])
+            ]
         self._feed(parser, "</root>\n", chunk_size, flush)
-        self.assert_event_tags(parser, [('end', 'root')])
+        expected_events += [('end', 'root')]
         self.assertIsNone(parser.close())
+        self.assert_event_tags(parser, expected_events)
 
     def test_simple_xml_chunk_1(self):
         self.test_simple_xml(chunk_size=1, flush=True)
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-02-20-21-03-31.bpo-46811.8BxgdQ.rst
@@ -0,0 +1 @@
+Make test suite support Expat >=2.4.5
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2024-02-07-15-49-37.gh-issue-115133.WBajNr.rst
@@ -0,0 +1 @@
+Fix etree XMLPullParser tests for Expat >=2.6.0 with reparse deferral



++++++ sphinx-802.patch ++++++
---
 Doc/tools/extensions/pyspecific.py |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

--- a/Doc/tools/extensions/pyspecific.py
+++ b/Doc/tools/extensions/pyspecific.py
@@ -27,7 +27,13 @@ try:
 except ImportError:
     from sphinx.environment import NoUri
 from sphinx.locale import _ as sphinx_gettext
-from sphinx.util import status_iterator, logging
+try:
+    from sphinx.util.display import status_iterator
+except ImportError:
+    # This method was moved into sphinx.util.display in Sphinx 6.1.0. Before
+    # that it resided in sphinx.util.
+    from sphinx.util import status_iterator
+from sphinx.util import logging
 from sphinx.util.nodes import split_explicit_title
 from sphinx.writers.text import TextWriter, TextTranslator
 from sphinx.writers.latex import LaTeXTranslator

Reply via email to