From 9fe71b82c6ef2ff67675dd29a826fc03422401ceb7729767876384a8deb10ae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Cepl?= Date: Thu, 18 Dec 2025 16:07:31 +0100 Subject: [PATCH] Fix CVE-2025-13836, CVE-2025-12084, and CVE-2025-13837. - Add CVE-2025-13836-http-resp-cont-len.patch (bsc#1254400, CVE-2025-13836) to prevent reading an HTTP response from a server, if no read amount is specified, with using Content-Length per default as the length. - Add CVE-2025-12084-minidom-quad-search.patch prevent quadratic behavior in node ID cache clearing (CVE-2025-12084, bsc#1254997). - Add CVE-2025-13837-plistlib-mailicious-length.patch protect against OOM when loading malicious content (CVE-2025-13837, bsc#1254401). --- CVE-2023-52425-libexpat-2.6.0-backport.patch | 26 +- CVE-2025-12084-minidom-quad-search.patch | 93 ++ CVE-2025-13836-http-resp-cont-len.patch | 35 +- ...025-13837-plistlib-mailicious-length.patch | 160 +++ fix_configure_rst.patch | 18 +- no-skipif-doctests.patch | 160 +-- python310.changes | 14 +- python310.spec | 6 + sphinx-72.patch | 928 ++++++++++-------- 9 files changed, 933 insertions(+), 507 deletions(-) create mode 100644 CVE-2025-12084-minidom-quad-search.patch create mode 100644 CVE-2025-13837-plistlib-mailicious-length.patch diff --git a/CVE-2023-52425-libexpat-2.6.0-backport.patch b/CVE-2023-52425-libexpat-2.6.0-backport.patch index 25e068f..b09aad4 100644 --- a/CVE-2023-52425-libexpat-2.6.0-backport.patch +++ b/CVE-2023-52425-libexpat-2.6.0-backport.patch @@ -4,9 +4,11 @@ Lib/test/test_xml_etree.py | 7 +++++++ 3 files changed, 14 insertions(+) ---- a/Lib/test/test_pyexpat.py -+++ b/Lib/test/test_pyexpat.py -@@ -766,6 +766,10 @@ class ReparseDeferralTest(unittest.TestC +Index: Python-3.10.19/Lib/test/test_pyexpat.py +=================================================================== +--- Python-3.10.19.orig/Lib/test/test_pyexpat.py 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Lib/test/test_pyexpat.py 2025-12-19 23:10:22.001497953 +0100 +@@ -802,6 +802,10 @@ self.assertEqual(started, ['doc']) def test_reparse_deferral_disabled(self): @@ -17,9 +19,11 @@ started = [] def start_element(name, _): ---- a/Lib/test/test_sax.py -+++ b/Lib/test/test_sax.py -@@ -1240,6 +1240,9 @@ class ExpatReaderTest(XmlTestBase): +Index: Python-3.10.19/Lib/test/test_sax.py +=================================================================== +--- Python-3.10.19.orig/Lib/test/test_sax.py 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Lib/test/test_sax.py 2025-12-19 23:10:22.002078897 +0100 +@@ -1240,6 +1240,9 @@ self.assertEqual(result.getvalue(), start + b"") @@ -29,9 +33,11 @@ def test_flush_reparse_deferral_disabled(self): result = BytesIO() xmlgen = XMLGenerator(result) ---- a/Lib/test/test_xml_etree.py -+++ b/Lib/test/test_xml_etree.py -@@ -1420,9 +1420,13 @@ class XMLPullParserTest(unittest.TestCas +Index: Python-3.10.19/Lib/test/test_xml_etree.py +=================================================================== +--- Python-3.10.19.orig/Lib/test/test_xml_etree.py 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Lib/test/test_xml_etree.py 2025-12-19 23:10:22.002413090 +0100 +@@ -1420,9 +1420,13 @@ self.assert_event_tags(parser, [('end', 'root')]) self.assertIsNone(parser.close()) @@ -45,7 +51,7 @@ def test_simple_xml_chunk_5(self): self.test_simple_xml(chunk_size=5, flush=True) -@@ -1647,6 +1651,9 @@ class XMLPullParserTest(unittest.TestCas +@@ -1647,6 +1651,9 @@ self.assert_event_tags(parser, [('end', 'doc')]) diff --git a/CVE-2025-12084-minidom-quad-search.patch b/CVE-2025-12084-minidom-quad-search.patch new file mode 100644 index 0000000..171e52c --- /dev/null +++ b/CVE-2025-12084-minidom-quad-search.patch @@ -0,0 +1,93 @@ +From f4eb9ab014545b521fb261b80adfa6d138e7e092 Mon Sep 17 00:00:00 2001 +From: Seth Michael Larson +Date: Wed, 3 Dec 2025 01:16:37 -0600 +Subject: [PATCH] gh-142145: Remove quadratic behavior in node ID cache + clearing (GH-142146) + +* Remove quadratic behavior in node ID cache clearing + +Co-authored-by: Jacob Walls <38668450+jacobtylerwalls@users.noreply.github.com> + +* Add news fragment + +--------- +(cherry picked from commit 08d8e18ad81cd45bc4a27d6da478b51ea49486e4) + +Co-authored-by: Seth Michael Larson +Co-authored-by: Jacob Walls <38668450+jacobtylerwalls@users.noreply.github.com> +--- + Lib/test/test_minidom.py | 18 ++++++++++ + Lib/xml/dom/minidom.py | 9 ----- + Misc/NEWS.d/next/Security/2025-12-01-09-36-45.gh-issue-142145.tcAUhg.rst | 1 + 3 files changed, 20 insertions(+), 8 deletions(-) + create mode 100644 Misc/NEWS.d/next/Security/2025-12-01-09-36-45.gh-issue-142145.tcAUhg.rst + +Index: Python-3.10.19/Lib/test/test_minidom.py +=================================================================== +--- Python-3.10.19.orig/Lib/test/test_minidom.py 2025-12-19 23:10:45.263295780 +0100 ++++ Python-3.10.19/Lib/test/test_minidom.py 2025-12-19 23:10:50.342493590 +0100 +@@ -2,6 +2,7 @@ + + import copy + import pickle ++import time + import io + from test import support + import unittest +@@ -176,6 +177,23 @@ + self.confirm(dom.documentElement.childNodes[-1].data == "Hello") + dom.unlink() + ++ def testAppendChildNoQuadraticComplexity(self): ++ impl = getDOMImplementation() ++ ++ newdoc = impl.createDocument(None, "some_tag", None) ++ top_element = newdoc.documentElement ++ children = [newdoc.createElement(f"child-{i}") for i in range(1, 2 ** 15 + 1)] ++ element = top_element ++ ++ start = time.time() ++ for child in children: ++ element.appendChild(child) ++ element = child ++ end = time.time() ++ ++ # This example used to take at least 30 seconds. ++ self.assertLess(end - start, 1) ++ + def testAppendChildFragment(self): + dom, orig, c1, c2, c3, frag = self._create_fragment_test_nodes() + dom.documentElement.appendChild(frag) +Index: Python-3.10.19/Lib/xml/dom/minidom.py +=================================================================== +--- Python-3.10.19.orig/Lib/xml/dom/minidom.py 2025-12-19 23:10:45.263295780 +0100 ++++ Python-3.10.19/Lib/xml/dom/minidom.py 2025-12-19 23:10:50.342898393 +0100 +@@ -292,13 +292,6 @@ + childNodes.append(node) + node.parentNode = self + +-def _in_document(node): +- # return True iff node is part of a document tree +- while node is not None: +- if node.nodeType == Node.DOCUMENT_NODE: +- return True +- node = node.parentNode +- return False + + def _write_data(writer, data): + "Writes datachars to writer." +@@ -1539,7 +1532,7 @@ + if node.nodeType == Node.DOCUMENT_NODE: + node._id_cache.clear() + node._id_search_stack = None +- elif _in_document(node): ++ elif node.ownerDocument: + node.ownerDocument._id_cache.clear() + node.ownerDocument._id_search_stack= None + +Index: Python-3.10.19/Misc/NEWS.d/next/Security/2025-12-01-09-36-45.gh-issue-142145.tcAUhg.rst +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ Python-3.10.19/Misc/NEWS.d/next/Security/2025-12-01-09-36-45.gh-issue-142145.tcAUhg.rst 2025-12-19 23:10:50.343161277 +0100 +@@ -0,0 +1 @@ ++Remove quadratic behavior in ``xml.minidom`` node ID cache clearing. diff --git a/CVE-2025-13836-http-resp-cont-len.patch b/CVE-2025-13836-http-resp-cont-len.patch index 8ac78e2..36900a6 100644 --- a/CVE-2025-13836-http-resp-cont-len.patch +++ b/CVE-2025-13836-http-resp-cont-len.patch @@ -13,16 +13,16 @@ of sent data. Co-authored-by: Serhiy Storchaka --- - Lib/http/client.py | 28 +++- - Lib/test/test_httplib.py | 66 ++++++++++ - Misc/NEWS.d/next/Security/2024-05-23-11-47-48.gh-issue-119451.qkJe9-.rst | 5 + Lib/http/client.py | 28 ++++++-- + Lib/test/test_httplib.py | 66 +++++++++++++++++++ + ...-05-23-11-47-48.gh-issue-119451.qkJe9-.rst | 5 ++ 3 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Security/2024-05-23-11-47-48.gh-issue-119451.qkJe9-.rst -Index: Python-3.10.19/Lib/http/client.py -=================================================================== ---- Python-3.10.19.orig/Lib/http/client.py 2025-12-18 16:06:48.095762644 +0100 -+++ Python-3.10.19/Lib/http/client.py 2025-12-18 16:07:05.770054507 +0100 +diff --git a/Lib/http/client.py b/Lib/http/client.py +index d1b7b1048c9171..c8ab5b7662c334 100644 +--- a/Lib/http/client.py ++++ b/Lib/http/client.py @@ -111,6 +111,11 @@ _MAXLINE = 65536 _MAXHEADERS = 100 @@ -35,7 +35,7 @@ Index: Python-3.10.19/Lib/http/client.py # Header name/value ABNF (http://tools.ietf.org/html/rfc7230#section-3.2) # # VCHAR = %x21-7E -@@ -628,10 +633,25 @@ +@@ -628,10 +633,25 @@ def _safe_read(self, amt): reading. If the bytes are truly not available (due to EOF), then the IncompleteRead exception can be used to detect the problem. """ @@ -65,11 +65,11 @@ Index: Python-3.10.19/Lib/http/client.py def _safe_readinto(self, b): """Same as _safe_read, but for reading into a buffer.""" -Index: Python-3.10.19/Lib/test/test_httplib.py -=================================================================== ---- Python-3.10.19.orig/Lib/test/test_httplib.py 2025-12-18 16:06:49.569188742 +0100 -+++ Python-3.10.19/Lib/test/test_httplib.py 2025-12-18 16:07:05.770432072 +0100 -@@ -1226,6 +1226,72 @@ +diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py +index 77152cf64565e0..89ec5f6f1c5383 100644 +--- a/Lib/test/test_httplib.py ++++ b/Lib/test/test_httplib.py +@@ -1226,6 +1226,72 @@ def run_server(): thread.join() self.assertEqual(result, b"proxied data\n") @@ -142,10 +142,11 @@ Index: Python-3.10.19/Lib/test/test_httplib.py def test_putrequest_override_domain_validation(self): """ It should be possible to override the default validation -Index: Python-3.10.19/Misc/NEWS.d/next/Security/2024-05-23-11-47-48.gh-issue-119451.qkJe9-.rst -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ Python-3.10.19/Misc/NEWS.d/next/Security/2024-05-23-11-47-48.gh-issue-119451.qkJe9-.rst 2025-12-18 16:07:05.770739655 +0100 +diff --git a/Misc/NEWS.d/next/Security/2024-05-23-11-47-48.gh-issue-119451.qkJe9-.rst b/Misc/NEWS.d/next/Security/2024-05-23-11-47-48.gh-issue-119451.qkJe9-.rst +new file mode 100644 +index 00000000000000..6d6f25cd2f8bf7 +--- /dev/null ++++ b/Misc/NEWS.d/next/Security/2024-05-23-11-47-48.gh-issue-119451.qkJe9-.rst @@ -0,0 +1,5 @@ +Fix a potential memory denial of service in the :mod:`http.client` module. +When connecting to a malicious server, it could cause diff --git a/CVE-2025-13837-plistlib-mailicious-length.patch b/CVE-2025-13837-plistlib-mailicious-length.patch new file mode 100644 index 0000000..ed1ff99 --- /dev/null +++ b/CVE-2025-13837-plistlib-mailicious-length.patch @@ -0,0 +1,160 @@ +From e99059d800b741504ef18693803927a0dc062be4 Mon Sep 17 00:00:00 2001 +From: Serhiy Storchaka +Date: Mon, 1 Dec 2025 17:28:15 +0200 +Subject: [PATCH] [3.10] gh-119342: Fix a potential denial of service in + plistlib (GH-119343) + +Reading a specially prepared small Plist file could cause OOM because file's +read(n) preallocates a bytes object for reading the specified amount of +data. Now plistlib reads large data by chunks, therefore the upper limit of +consumed memory is proportional to the size of the input file. +(cherry picked from commit 694922cf40aa3a28f898b5f5ee08b71b4922df70) + +Co-authored-by: Serhiy Storchaka +--- + Lib/plistlib.py | 31 ++++++++++------ + Lib/test/test_plistlib.py | 37 +++++++++++++++++-- + ...-05-21-22-11-31.gh-issue-119342.BTFj4Z.rst | 5 +++ + 3 files changed, 59 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/Security/2024-05-21-22-11-31.gh-issue-119342.BTFj4Z.rst + +diff --git a/Lib/plistlib.py b/Lib/plistlib.py +index d6c997efe9c5f5..c80dfee02a3335 100644 +--- a/Lib/plistlib.py ++++ b/Lib/plistlib.py +@@ -73,6 +73,9 @@ + PlistFormat = enum.Enum('PlistFormat', 'FMT_XML FMT_BINARY', module=__name__) + globals().update(PlistFormat.__members__) + ++# Data larger than this will be read in chunks, to prevent extreme ++# overallocation. ++_MIN_READ_BUF_SIZE = 1 << 20 + + class UID: + def __init__(self, data): +@@ -499,12 +502,24 @@ def _get_size(self, tokenL): + + return tokenL + ++ def _read(self, size): ++ cursize = min(size, _MIN_READ_BUF_SIZE) ++ data = self._fp.read(cursize) ++ while True: ++ if len(data) != cursize: ++ raise InvalidFileException ++ if cursize == size: ++ return data ++ delta = min(cursize, size - cursize) ++ data += self._fp.read(delta) ++ cursize += delta ++ + def _read_ints(self, n, size): +- data = self._fp.read(size * n) ++ data = self._read(size * n) + if size in _BINARY_FORMAT: + return struct.unpack(f'>{n}{_BINARY_FORMAT[size]}', data) + else: +- if not size or len(data) != size * n: ++ if not size: + raise InvalidFileException() + return tuple(int.from_bytes(data[i: i + size], 'big') + for i in range(0, size * n, size)) +@@ -561,22 +576,16 @@ def _read_object(self, ref): + + elif tokenH == 0x40: # data + s = self._get_size(tokenL) +- result = self._fp.read(s) +- if len(result) != s: +- raise InvalidFileException() ++ result = self._read(s) + + elif tokenH == 0x50: # ascii string + s = self._get_size(tokenL) +- data = self._fp.read(s) +- if len(data) != s: +- raise InvalidFileException() ++ data = self._read(s) + result = data.decode('ascii') + + elif tokenH == 0x60: # unicode string + s = self._get_size(tokenL) * 2 +- data = self._fp.read(s) +- if len(data) != s: +- raise InvalidFileException() ++ data = self._read(s) + result = data.decode('utf-16be') + + elif tokenH == 0x80: # UID +diff --git a/Lib/test/test_plistlib.py b/Lib/test/test_plistlib.py +index ef96c6ceda21a2..d3836991d212cd 100644 +--- a/Lib/test/test_plistlib.py ++++ b/Lib/test/test_plistlib.py +@@ -838,8 +838,7 @@ def test_xml_plist_with_entity_decl(self): + + class TestBinaryPlistlib(unittest.TestCase): + +- @staticmethod +- def decode(*objects, offset_size=1, ref_size=1): ++ def build(self, *objects, offset_size=1, ref_size=1): + data = [b'bplist00'] + offset = 8 + offsets = [] +@@ -851,7 +850,11 @@ def decode(*objects, offset_size=1, ref_size=1): + len(objects), 0, offset) + data.extend(offsets) + data.append(tail) +- return plistlib.loads(b''.join(data), fmt=plistlib.FMT_BINARY) ++ return b''.join(data) ++ ++ def decode(self, *objects, offset_size=1, ref_size=1): ++ data = self.build(*objects, offset_size=offset_size, ref_size=ref_size) ++ return plistlib.loads(data, fmt=plistlib.FMT_BINARY) + + def test_nonstandard_refs_size(self): + # Issue #21538: Refs and offsets are 24-bit integers +@@ -959,6 +962,34 @@ def test_invalid_binary(self): + with self.assertRaises(plistlib.InvalidFileException): + plistlib.loads(b'bplist00' + data, fmt=plistlib.FMT_BINARY) + ++ def test_truncated_large_data(self): ++ self.addCleanup(os_helper.unlink, os_helper.TESTFN) ++ def check(data): ++ with open(os_helper.TESTFN, 'wb') as f: ++ f.write(data) ++ # buffered file ++ with open(os_helper.TESTFN, 'rb') as f: ++ with self.assertRaises(plistlib.InvalidFileException): ++ plistlib.load(f, fmt=plistlib.FMT_BINARY) ++ # unbuffered file ++ with open(os_helper.TESTFN, 'rb', buffering=0) as f: ++ with self.assertRaises(plistlib.InvalidFileException): ++ plistlib.load(f, fmt=plistlib.FMT_BINARY) ++ for w in range(20, 64): ++ s = 1 << w ++ # data ++ check(self.build(b'\x4f\x13' + s.to_bytes(8, 'big'))) ++ # ascii string ++ check(self.build(b'\x5f\x13' + s.to_bytes(8, 'big'))) ++ # unicode string ++ check(self.build(b'\x6f\x13' + s.to_bytes(8, 'big'))) ++ # array ++ check(self.build(b'\xaf\x13' + s.to_bytes(8, 'big'))) ++ # dict ++ check(self.build(b'\xdf\x13' + s.to_bytes(8, 'big'))) ++ # number of objects ++ check(b'bplist00' + struct.pack('>6xBBQQQ', 1, 1, s, 0, 8)) ++ + + class TestKeyedArchive(unittest.TestCase): + def test_keyed_archive_data(self): +diff --git a/Misc/NEWS.d/next/Security/2024-05-21-22-11-31.gh-issue-119342.BTFj4Z.rst b/Misc/NEWS.d/next/Security/2024-05-21-22-11-31.gh-issue-119342.BTFj4Z.rst +new file mode 100644 +index 00000000000000..04fd8faca4cf7e +--- /dev/null ++++ b/Misc/NEWS.d/next/Security/2024-05-21-22-11-31.gh-issue-119342.BTFj4Z.rst +@@ -0,0 +1,5 @@ ++Fix a potential memory denial of service in the :mod:`plistlib` module. ++When reading a Plist file received from untrusted source, it could cause ++an arbitrary amount of memory to be allocated. ++This could have led to symptoms including a :exc:`MemoryError`, swapping, out ++of memory (OOM) killed processes or containers, or even system crashes. diff --git a/fix_configure_rst.patch b/fix_configure_rst.patch index 7c52e72..cf8b998 100644 --- a/fix_configure_rst.patch +++ b/fix_configure_rst.patch @@ -3,9 +3,11 @@ Misc/NEWS | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) ---- a/Doc/using/configure.rst -+++ b/Doc/using/configure.rst -@@ -42,7 +42,6 @@ General Options +Index: Python-3.10.19/Doc/using/configure.rst +=================================================================== +--- Python-3.10.19.orig/Doc/using/configure.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/using/configure.rst 2025-12-19 23:10:08.779794344 +0100 +@@ -42,7 +42,6 @@ See :data:`sys.int_info.bits_per_digit `. @@ -13,7 +15,7 @@ .. cmdoption:: --with-cxx-main=COMPILER Compile the Python ``main()`` function and link Python executable with C++ -@@ -473,13 +472,11 @@ macOS Options +@@ -473,13 +472,11 @@ See ``Mac/README.rst``. @@ -27,9 +29,11 @@ .. cmdoption:: --enable-framework=INSTALLDIR Create a Python.framework rather than a traditional Unix install. Optional ---- a/Misc/NEWS -+++ b/Misc/NEWS -@@ -3942,7 +3942,7 @@ C API +Index: Python-3.10.19/Misc/NEWS +=================================================================== +--- Python-3.10.19.orig/Misc/NEWS 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Misc/NEWS 2025-12-19 23:10:08.784479751 +0100 +@@ -4018,7 +4018,7 @@ ----- - bpo-43795: The list in :ref:`stable-abi-list` now shows the public name diff --git a/no-skipif-doctests.patch b/no-skipif-doctests.patch index 2601c01..b4e230e 100644 --- a/no-skipif-doctests.patch +++ b/no-skipif-doctests.patch @@ -4,9 +4,11 @@ unchanged: Doc/library/turtle.rst | 82 ------------------------------------------------- 1 file changed, 82 deletions(-) ---- a/Doc/library/turtle.rst -+++ b/Doc/library/turtle.rst -@@ -250,7 +250,6 @@ Turtle motion +Index: Python-3.10.19/Doc/library/turtle.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/turtle.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/turtle.rst 2025-12-19 23:10:03.998503888 +0100 +@@ -250,7 +250,6 @@ turtle is headed. .. doctest:: @@ -14,7 +16,7 @@ unchanged: >>> turtle.position() (0.00,0.00) -@@ -277,7 +276,6 @@ Turtle motion +@@ -277,7 +276,6 @@ >>> turtle.goto(0, 0) .. doctest:: @@ -22,7 +24,7 @@ unchanged: >>> turtle.position() (0.00,0.00) -@@ -296,13 +294,11 @@ Turtle motion +@@ -296,13 +294,11 @@ orientation depends on the turtle mode, see :func:`mode`. .. doctest:: @@ -36,7 +38,7 @@ unchanged: >>> turtle.heading() 22.0 -@@ -321,13 +317,11 @@ Turtle motion +@@ -321,13 +317,11 @@ orientation depends on the turtle mode, see :func:`mode`. .. doctest:: @@ -50,7 +52,7 @@ unchanged: >>> turtle.heading() 22.0 -@@ -350,13 +344,11 @@ Turtle motion +@@ -350,13 +344,11 @@ not change the turtle's orientation. .. doctest:: @@ -64,7 +66,7 @@ unchanged: >>> tp = turtle.pos() >>> tp -@@ -380,13 +372,11 @@ Turtle motion +@@ -380,13 +372,11 @@ unchanged. .. doctest:: @@ -78,7 +80,7 @@ unchanged: >>> turtle.position() (0.00,240.00) -@@ -402,13 +392,11 @@ Turtle motion +@@ -402,13 +392,11 @@ Set the turtle's second coordinate to *y*, leave first coordinate unchanged. .. doctest:: @@ -92,7 +94,7 @@ unchanged: >>> turtle.position() (0.00,40.00) -@@ -435,7 +423,6 @@ Turtle motion +@@ -435,7 +423,6 @@ =================== ==================== .. doctest:: @@ -100,7 +102,7 @@ unchanged: >>> turtle.setheading(90) >>> turtle.heading() -@@ -448,14 +435,12 @@ Turtle motion +@@ -448,14 +435,12 @@ its start-orientation (which depends on the mode, see :func:`mode`). .. doctest:: @@ -115,7 +117,7 @@ unchanged: >>> turtle.heading() 90.0 -@@ -487,7 +472,6 @@ Turtle motion +@@ -487,7 +472,6 @@ calculated automatically. May be used to draw regular polygons. .. doctest:: @@ -123,7 +125,7 @@ unchanged: >>> turtle.home() >>> turtle.position() -@@ -516,7 +500,6 @@ Turtle motion +@@ -516,7 +500,6 @@ .. doctest:: @@ -131,7 +133,7 @@ unchanged: >>> turtle.home() >>> turtle.dot() -@@ -534,7 +517,6 @@ Turtle motion +@@ -534,7 +517,6 @@ it by calling ``clearstamp(stamp_id)``. .. doctest:: @@ -139,7 +141,7 @@ unchanged: >>> turtle.color("blue") >>> turtle.stamp() -@@ -550,7 +532,6 @@ Turtle motion +@@ -550,7 +532,6 @@ Delete stamp with given *stampid*. .. doctest:: @@ -147,7 +149,7 @@ unchanged: >>> turtle.position() (150.00,-0.00) -@@ -595,7 +576,6 @@ Turtle motion +@@ -595,7 +576,6 @@ undo actions is determined by the size of the undobuffer. .. doctest:: @@ -155,7 +157,7 @@ unchanged: >>> for i in range(4): ... turtle.fd(50); turtle.lt(80) -@@ -628,7 +608,6 @@ Turtle motion +@@ -628,7 +608,6 @@ turtle turn instantly. .. doctest:: @@ -163,7 +165,7 @@ unchanged: >>> turtle.speed() 3 -@@ -649,7 +628,6 @@ Tell Turtle's state +@@ -649,7 +628,6 @@ Return the turtle's current location (x,y) (as a :class:`Vec2D` vector). .. doctest:: @@ -171,7 +173,7 @@ unchanged: >>> turtle.pos() (440.00,-0.00) -@@ -665,7 +643,6 @@ Tell Turtle's state +@@ -665,7 +643,6 @@ orientation which depends on the mode - "standard"/"world" or "logo". .. doctest:: @@ -179,7 +181,7 @@ unchanged: >>> turtle.goto(10, 10) >>> turtle.towards(0,0) -@@ -677,7 +654,6 @@ Tell Turtle's state +@@ -677,7 +654,6 @@ Return the turtle's x coordinate. .. doctest:: @@ -187,7 +189,7 @@ unchanged: >>> turtle.home() >>> turtle.left(50) -@@ -693,7 +669,6 @@ Tell Turtle's state +@@ -693,7 +669,6 @@ Return the turtle's y coordinate. .. doctest:: @@ -195,7 +197,7 @@ unchanged: >>> turtle.home() >>> turtle.left(60) -@@ -710,7 +685,6 @@ Tell Turtle's state +@@ -710,7 +685,6 @@ :func:`mode`). .. doctest:: @@ -203,7 +205,7 @@ unchanged: >>> turtle.home() >>> turtle.left(67) -@@ -727,7 +701,6 @@ Tell Turtle's state +@@ -727,7 +701,6 @@ other turtle, in turtle step units. .. doctest:: @@ -211,7 +213,7 @@ unchanged: >>> turtle.home() >>> turtle.distance(30,40) -@@ -751,7 +724,6 @@ Settings for measurement +@@ -751,7 +724,6 @@ Default value is 360 degrees. .. doctest:: @@ -219,7 +221,7 @@ unchanged: >>> turtle.home() >>> turtle.left(90) -@@ -774,7 +746,6 @@ Settings for measurement +@@ -774,7 +746,6 @@ ``degrees(2*math.pi)``. .. doctest:: @@ -227,7 +229,7 @@ unchanged: >>> turtle.home() >>> turtle.left(90) -@@ -785,7 +756,6 @@ Settings for measurement +@@ -785,7 +756,6 @@ 1.5707963267948966 .. doctest:: @@ -235,7 +237,7 @@ unchanged: :hide: >>> turtle.degrees(360) -@@ -821,7 +791,6 @@ Drawing state +@@ -821,7 +791,6 @@ thickness. If no argument is given, the current pensize is returned. .. doctest:: @@ -243,7 +245,7 @@ unchanged: >>> turtle.pensize() 1 -@@ -853,7 +822,6 @@ Drawing state +@@ -853,7 +822,6 @@ attributes in one statement. .. doctest:: @@ -251,7 +253,7 @@ unchanged: :options: +NORMALIZE_WHITESPACE >>> turtle.pen(fillcolor="black", pencolor="red", pensize=10) -@@ -876,7 +844,6 @@ Drawing state +@@ -876,7 +844,6 @@ Return ``True`` if pen is down, ``False`` if it's up. .. doctest:: @@ -259,7 +261,7 @@ unchanged: >>> turtle.penup() >>> turtle.isdown() -@@ -917,7 +884,6 @@ Color control +@@ -917,7 +884,6 @@ newly set pencolor. .. doctest:: @@ -267,7 +269,7 @@ unchanged: >>> colormode() 1.0 -@@ -966,7 +932,6 @@ Color control +@@ -966,7 +932,6 @@ with the newly set fillcolor. .. doctest:: @@ -275,7 +277,7 @@ unchanged: >>> turtle.fillcolor("violet") >>> turtle.fillcolor() -@@ -1005,7 +970,6 @@ Color control +@@ -1005,7 +970,6 @@ with the newly set colors. .. doctest:: @@ -283,7 +285,7 @@ unchanged: >>> turtle.color("red", "green") >>> turtle.color() -@@ -1022,7 +986,6 @@ Filling +@@ -1022,7 +986,6 @@ ~~~~~~~ .. doctest:: @@ -291,7 +293,7 @@ unchanged: :hide: >>> turtle.home() -@@ -1032,7 +995,6 @@ Filling +@@ -1032,7 +995,6 @@ Return fillstate (``True`` if filling, ``False`` else). .. doctest:: @@ -299,7 +301,7 @@ unchanged: >>> turtle.begin_fill() >>> if turtle.filling(): -@@ -1057,7 +1019,6 @@ Filling +@@ -1057,7 +1019,6 @@ above may be either all yellow or have some white regions. .. doctest:: @@ -307,7 +309,7 @@ unchanged: >>> turtle.color("black", "red") >>> turtle.begin_fill() -@@ -1074,7 +1035,6 @@ More drawing control +@@ -1074,7 +1035,6 @@ variables to the default values. .. doctest:: @@ -315,7 +317,7 @@ unchanged: >>> turtle.goto(0,-22) >>> turtle.left(100) -@@ -1125,7 +1085,6 @@ Visibility +@@ -1125,7 +1085,6 @@ drawing observably. .. doctest:: @@ -323,7 +325,7 @@ unchanged: >>> turtle.hideturtle() -@@ -1136,7 +1095,6 @@ Visibility +@@ -1136,7 +1095,6 @@ Make the turtle visible. .. doctest:: @@ -331,7 +333,7 @@ unchanged: >>> turtle.showturtle() -@@ -1167,7 +1125,6 @@ Appearance +@@ -1167,7 +1125,6 @@ deal with shapes see Screen method :func:`register_shape`. .. doctest:: @@ -339,7 +341,7 @@ unchanged: >>> turtle.shape() 'classic' -@@ -1193,7 +1150,6 @@ Appearance +@@ -1193,7 +1150,6 @@ ``resizemode("user")`` is called by :func:`shapesize` when used with arguments. .. doctest:: @@ -347,15 +349,15 @@ unchanged: >>> turtle.resizemode() 'noresize' -@@ -1217,7 +1173,6 @@ Appearance - of the shapes's outline. +@@ -1217,7 +1173,6 @@ + of the shape's outline. .. doctest:: - :skipif: _tkinter is None >>> turtle.shapesize() (1.0, 1.0, 1) -@@ -1242,7 +1197,6 @@ Appearance +@@ -1242,7 +1197,6 @@ heading of the turtle are sheared. .. doctest:: @@ -363,7 +365,7 @@ unchanged: >>> turtle.shape("circle") >>> turtle.shapesize(5,2) -@@ -1259,7 +1213,6 @@ Appearance +@@ -1259,7 +1213,6 @@ change the turtle's heading (direction of movement). .. doctest:: @@ -371,7 +373,7 @@ unchanged: >>> turtle.reset() >>> turtle.shape("circle") -@@ -1279,7 +1232,6 @@ Appearance +@@ -1279,7 +1232,6 @@ (direction of movement). .. doctest:: @@ -379,7 +381,7 @@ unchanged: >>> turtle.reset() >>> turtle.shape("circle") -@@ -1305,7 +1257,6 @@ Appearance +@@ -1305,7 +1257,6 @@ turtle (its direction of movement). .. doctest:: @@ -387,7 +389,7 @@ unchanged: >>> turtle.reset() >>> turtle.shape("circle") -@@ -1334,7 +1285,6 @@ Appearance +@@ -1334,7 +1285,6 @@ given matrix. .. doctest:: @@ -395,7 +397,7 @@ unchanged: >>> turtle = Turtle() >>> turtle.shape("square") -@@ -1350,7 +1300,6 @@ Appearance +@@ -1350,7 +1300,6 @@ can be used to define a new shape or components of a compound shape. .. doctest:: @@ -403,7 +405,7 @@ unchanged: >>> turtle.shape("square") >>> turtle.shapetransform(4, -1, 0, 2) -@@ -1375,7 +1324,6 @@ Using events +@@ -1375,7 +1324,6 @@ procedural way: .. doctest:: @@ -411,7 +413,7 @@ unchanged: >>> def turn(x, y): ... left(180) -@@ -1396,7 +1344,6 @@ Using events +@@ -1396,7 +1344,6 @@ ``None``, existing bindings are removed. .. doctest:: @@ -419,7 +421,7 @@ unchanged: >>> class MyTurtle(Turtle): ... def glow(self,x,y): -@@ -1424,7 +1371,6 @@ Using events +@@ -1424,7 +1371,6 @@ mouse-click event on that turtle. .. doctest:: @@ -427,7 +429,7 @@ unchanged: >>> turtle.ondrag(turtle.goto) -@@ -1452,7 +1398,6 @@ Special Turtle methods +@@ -1452,7 +1398,6 @@ Return the last recorded polygon. .. doctest:: @@ -435,7 +437,7 @@ unchanged: >>> turtle.home() >>> turtle.begin_poly() -@@ -1472,7 +1417,6 @@ Special Turtle methods +@@ -1472,7 +1417,6 @@ turtle properties. .. doctest:: @@ -443,7 +445,7 @@ unchanged: >>> mick = Turtle() >>> joe = mick.clone() -@@ -1485,7 +1429,6 @@ Special Turtle methods +@@ -1485,7 +1429,6 @@ return the "anonymous turtle": .. doctest:: @@ -451,7 +453,7 @@ unchanged: >>> pet = getturtle() >>> pet.fd(50) -@@ -1499,7 +1442,6 @@ Special Turtle methods +@@ -1499,7 +1442,6 @@ TurtleScreen methods can then be called for that object. .. doctest:: @@ -459,7 +461,7 @@ unchanged: >>> ts = turtle.getscreen() >>> ts -@@ -1517,7 +1459,6 @@ Special Turtle methods +@@ -1517,7 +1459,6 @@ ``None``, the undobuffer is disabled. .. doctest:: @@ -467,7 +469,7 @@ unchanged: >>> turtle.setundobuffer(42) -@@ -1527,7 +1468,6 @@ Special Turtle methods +@@ -1527,7 +1468,6 @@ Return number of entries in the undobuffer. .. doctest:: @@ -475,7 +477,7 @@ unchanged: >>> while undobufferentries(): ... undo() -@@ -1550,7 +1490,6 @@ below: +@@ -1550,7 +1490,6 @@ For example: .. doctest:: @@ -483,7 +485,7 @@ unchanged: >>> s = Shape("compound") >>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5)) -@@ -1561,7 +1500,6 @@ below: +@@ -1561,7 +1500,6 @@ 3. Now add the Shape to the Screen's shapelist and use it: .. doctest:: @@ -491,7 +493,7 @@ unchanged: >>> register_shape("myshape", s) >>> shape("myshape") -@@ -1581,7 +1519,6 @@ Most of the examples in this section ref +@@ -1581,7 +1519,6 @@ ``screen``. .. doctest:: @@ -499,7 +501,7 @@ unchanged: :hide: >>> screen = Screen() -@@ -1598,7 +1535,6 @@ Window control +@@ -1598,7 +1535,6 @@ Set or return background color of the TurtleScreen. .. doctest:: @@ -507,7 +509,7 @@ unchanged: >>> screen.bgcolor("orange") >>> screen.bgcolor() -@@ -1690,7 +1626,6 @@ Window control +@@ -1690,7 +1626,6 @@ distorted. .. doctest:: @@ -515,7 +517,7 @@ unchanged: >>> screen.reset() >>> screen.setworldcoordinates(-50,-7.5,50,7.5) -@@ -1701,7 +1636,6 @@ Window control +@@ -1701,7 +1636,6 @@ ... left(45); fd(2) # a regular octagon .. doctest:: @@ -523,7 +525,7 @@ unchanged: :hide: >>> screen.reset() -@@ -1723,7 +1657,6 @@ Animation control +@@ -1723,7 +1657,6 @@ Optional argument: .. doctest:: @@ -531,7 +533,7 @@ unchanged: >>> screen.delay() 10 -@@ -1745,7 +1678,6 @@ Animation control +@@ -1745,7 +1678,6 @@ :func:`delay`). .. doctest:: @@ -539,7 +541,7 @@ unchanged: >>> screen.tracer(8, 25) >>> dist = 2 -@@ -1782,7 +1714,6 @@ Using screen events +@@ -1782,7 +1714,6 @@ must have the focus. (See method :func:`listen`.) .. doctest:: @@ -547,7 +549,7 @@ unchanged: >>> def f(): ... fd(50) -@@ -1803,7 +1734,6 @@ Using screen events +@@ -1803,7 +1734,6 @@ must have focus. (See method :func:`listen`.) .. doctest:: @@ -555,7 +557,7 @@ unchanged: >>> def f(): ... fd(50) -@@ -1828,7 +1758,6 @@ Using screen events +@@ -1828,7 +1758,6 @@ named ``turtle``: .. doctest:: @@ -563,7 +565,7 @@ unchanged: >>> screen.onclick(turtle.goto) # Subsequently clicking into the TurtleScreen will >>> # make the turtle move to the clicked point. -@@ -1848,7 +1777,6 @@ Using screen events +@@ -1848,7 +1777,6 @@ Install a timer that calls *fun* after *t* milliseconds. .. doctest:: @@ -571,7 +573,7 @@ unchanged: >>> running = True >>> def f(): -@@ -1930,7 +1858,6 @@ Settings and special methods +@@ -1930,7 +1858,6 @@ ============ ========================= =================== .. doctest:: @@ -579,7 +581,7 @@ unchanged: >>> mode("logo") # resets turtle heading to north >>> mode() -@@ -1945,7 +1872,6 @@ Settings and special methods +@@ -1945,7 +1872,6 @@ values of color triples have to be in the range 0..\ *cmode*. .. doctest:: @@ -587,7 +589,7 @@ unchanged: >>> screen.colormode(1) >>> turtle.pencolor(240, 160, 80) -@@ -1966,7 +1892,6 @@ Settings and special methods +@@ -1966,7 +1892,6 @@ do with a Tkinter Canvas. .. doctest:: @@ -595,7 +597,7 @@ unchanged: >>> cv = screen.getcanvas() >>> cv -@@ -1978,7 +1903,6 @@ Settings and special methods +@@ -1978,7 +1903,6 @@ Return a list of names of all currently available turtle shapes. .. doctest:: @@ -603,7 +605,7 @@ unchanged: >>> screen.getshapes() ['arrow', 'blank', 'circle', ..., 'turtle'] -@@ -2002,7 +1926,6 @@ Settings and special methods +@@ -2002,7 +1926,6 @@ coordinates: Install the corresponding polygon shape. .. doctest:: @@ -611,7 +613,7 @@ unchanged: >>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3))) -@@ -2018,7 +1941,6 @@ Settings and special methods +@@ -2018,7 +1941,6 @@ Return the list of turtles on the screen. .. doctest:: @@ -619,7 +621,7 @@ unchanged: >>> for turtle in screen.turtles(): ... turtle.color("red") -@@ -2080,7 +2002,6 @@ Methods specific to Screen, not inherite +@@ -2080,7 +2002,6 @@ center window vertically .. doctest:: @@ -627,7 +629,7 @@ unchanged: >>> screen.setup (width=200, height=200, startx=0, starty=0) >>> # sets window to 200x200 pixels, in upper left of screen -@@ -2096,7 +2017,6 @@ Methods specific to Screen, not inherite +@@ -2096,7 +2017,6 @@ Set title of turtle window to *titlestring*. .. doctest:: @@ -635,7 +637,7 @@ unchanged: >>> screen.title("Welcome to the turtle zoo!") -@@ -2167,7 +2087,6 @@ Public classes +@@ -2167,7 +2087,6 @@ Example: .. doctest:: @@ -643,7 +645,7 @@ unchanged: >>> poly = ((0,0),(10,-5),(0,10),(-10,-5)) >>> s = Shape("compound") -@@ -2514,7 +2433,6 @@ Changes since Python 3.0 +@@ -2518,7 +2437,6 @@ .. doctest:: diff --git a/python310.changes b/python310.changes index e02421d..0272bbd 100644 --- a/python310.changes +++ b/python310.changes @@ -1,6 +1,16 @@ ------------------------------------------------------------------- -Thu Dec 18 15:53:59 CET 2025 - Matej Cepl -- +Thu Dec 18 10:33:44 UTC 2025 - Matej Cepl + +- Add CVE-2025-13836-http-resp-cont-len.patch (bsc#1254400, + CVE-2025-13836) to prevent reading an HTTP response from + a server, if no read amount is specified, with using + Content-Length per default as the length. +- Add CVE-2025-12084-minidom-quad-search.patch prevent quadratic + behavior in node ID cache clearing (CVE-2025-12084, + bsc#1254997). +- Add CVE-2025-13837-plistlib-mailicious-length.patch protect + against OOM when loading malicious content (CVE-2025-13837, + bsc#1254401). ------------------------------------------------------------------- Thu Dec 18 10:33:44 UTC 2025 - Matej Cepl diff --git a/python310.spec b/python310.spec index 6b27d62..782d548 100644 --- a/python310.spec +++ b/python310.spec @@ -210,6 +210,12 @@ Patch30: CVE-2025-6075-expandvars-perf-degrad.patch # PATCH-FIX-UPSTREAM CVE-2025-13836-http-resp-cont-len.patch bsc#1254400 mcepl@suse.com # Avoid loading possibly compromised length of HTTP response Patch31: CVE-2025-13836-http-resp-cont-len.patch +# PATCH-FIX-UPSTREAM CVE-2025-12084-minidom-quad-search.patch bsc#1254997 mcepl@suse.com +# prevent quadratic behavior in node ID cache clearing +Patch32: CVE-2025-12084-minidom-quad-search.patch +# PATCH-FIX-UPSTREAM CVE-2025-13837-plistlib-mailicious-length.patch bsc#1254401 mcepl@suse.com +# protect against OOM when loading malicious content +Patch33: CVE-2025-13837-plistlib-mailicious-length.patch BuildRequires: autoconf-archive BuildRequires: automake BuildRequires: fdupes diff --git a/sphinx-72.patch b/sphinx-72.patch index 8cd8457..7245618 100644 --- a/sphinx-72.patch +++ b/sphinx-72.patch @@ -73,8 +73,10 @@ Doc/tutorial/stdlib.rst | 2 72 files changed, 458 insertions(+), 427 deletions(-) ---- a/Doc/c-api/bytearray.rst -+++ b/Doc/c-api/bytearray.rst +Index: Python-3.10.19/Doc/c-api/bytearray.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/bytearray.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/bytearray.rst 2025-12-19 23:10:15.391446431 +0100 @@ -5,7 +5,7 @@ Byte Array Objects ------------------ @@ -84,9 +86,11 @@ .. c:type:: PyByteArrayObject ---- a/Doc/c-api/bytes.rst -+++ b/Doc/c-api/bytes.rst -@@ -8,7 +8,7 @@ Bytes Objects +Index: Python-3.10.19/Doc/c-api/bytes.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/bytes.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/bytes.rst 2025-12-19 23:10:15.391922542 +0100 +@@ -8,7 +8,7 @@ These functions raise :exc:`TypeError` when expecting a bytes parameter and called with a non-bytes parameter. @@ -95,8 +99,10 @@ .. c:type:: PyBytesObject ---- a/Doc/c-api/capsule.rst -+++ b/Doc/c-api/capsule.rst +Index: Python-3.10.19/Doc/c-api/capsule.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/capsule.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/capsule.rst 2025-12-19 23:10:15.392109858 +0100 @@ -5,7 +5,7 @@ Capsules -------- @@ -106,8 +112,10 @@ Refer to :ref:`using-capsules` for more information on using these objects. ---- a/Doc/c-api/complex.rst -+++ b/Doc/c-api/complex.rst +Index: Python-3.10.19/Doc/c-api/complex.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/complex.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/complex.rst 2025-12-19 23:10:15.392289421 +0100 @@ -5,7 +5,7 @@ Complex Number Objects ---------------------- @@ -117,9 +125,11 @@ Python's complex number objects are implemented as two distinct types when viewed from the C API: one is the Python object exposed to Python programs, and ---- a/Doc/c-api/concrete.rst -+++ b/Doc/c-api/concrete.rst -@@ -40,7 +40,7 @@ This section describes Python type objec +Index: Python-3.10.19/Doc/c-api/concrete.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/concrete.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/concrete.rst 2025-12-19 23:10:15.392466051 +0100 +@@ -40,7 +40,7 @@ Numeric Objects =============== @@ -128,7 +138,7 @@ .. toctree:: -@@ -55,7 +55,7 @@ Numeric Objects +@@ -55,7 +55,7 @@ Sequence Objects ================ @@ -137,7 +147,7 @@ Generic operations on sequence objects were discussed in the previous chapter; this section deals with the specific kinds of sequence objects that are -@@ -77,7 +77,7 @@ intrinsic to the Python language. +@@ -77,7 +77,7 @@ Container Objects ================= @@ -146,8 +156,10 @@ .. toctree:: ---- a/Doc/c-api/dict.rst -+++ b/Doc/c-api/dict.rst +Index: Python-3.10.19/Doc/c-api/dict.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/dict.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/dict.rst 2025-12-19 23:10:15.392652110 +0100 @@ -5,7 +5,7 @@ Dictionary Objects ------------------ @@ -157,7 +169,7 @@ .. c:type:: PyDictObject -@@ -154,7 +154,7 @@ Dictionary Objects +@@ -154,7 +154,7 @@ .. c:function:: Py_ssize_t PyDict_Size(PyObject *p) @@ -166,9 +178,11 @@ Return the number of items in the dictionary. This is equivalent to ``len(p)`` on a dictionary. ---- a/Doc/c-api/exceptions.rst -+++ b/Doc/c-api/exceptions.rst -@@ -503,7 +503,7 @@ Signal Handling +Index: Python-3.10.19/Doc/c-api/exceptions.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/exceptions.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/exceptions.rst 2025-12-19 23:10:15.392896207 +0100 +@@ -503,7 +503,7 @@ .. c:function:: int PyErr_CheckSignals() .. index:: @@ -177,7 +191,7 @@ single: SIGINT single: KeyboardInterrupt (built-in exception) -@@ -534,7 +534,7 @@ Signal Handling +@@ -534,7 +534,7 @@ .. c:function:: void PyErr_SetInterrupt() .. index:: @@ -186,7 +200,7 @@ single: SIGINT single: KeyboardInterrupt (built-in exception) -@@ -549,7 +549,7 @@ Signal Handling +@@ -549,7 +549,7 @@ .. c:function:: int PyErr_SetInterruptEx(int signum) .. index:: @@ -195,8 +209,10 @@ single: KeyboardInterrupt (built-in exception) Simulate the effect of a signal arriving. The next time ---- a/Doc/c-api/file.rst -+++ b/Doc/c-api/file.rst +Index: Python-3.10.19/Doc/c-api/file.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/file.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/file.rst 2025-12-19 23:10:15.393159161 +0100 @@ -5,7 +5,7 @@ File Objects ------------ @@ -206,8 +222,10 @@ These APIs are a minimal emulation of the Python 2 C API for built-in file objects, which used to rely on the buffered I/O (:c:expr:`FILE*`) support ---- a/Doc/c-api/float.rst -+++ b/Doc/c-api/float.rst +Index: Python-3.10.19/Doc/c-api/float.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/float.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/float.rst 2025-12-19 23:10:15.393330204 +0100 @@ -5,7 +5,7 @@ Floating Point Objects ---------------------- @@ -217,8 +235,10 @@ .. c:type:: PyFloatObject ---- a/Doc/c-api/function.rst -+++ b/Doc/c-api/function.rst +Index: Python-3.10.19/Doc/c-api/function.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/function.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/function.rst 2025-12-19 23:10:15.393493494 +0100 @@ -5,7 +5,7 @@ Function Objects ---------------- @@ -228,9 +248,11 @@ There are a few functions specific to Python functions. ---- a/Doc/c-api/import.rst -+++ b/Doc/c-api/import.rst -@@ -41,7 +41,7 @@ Importing Modules +Index: Python-3.10.19/Doc/c-api/import.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/import.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/import.rst 2025-12-19 23:10:15.393679483 +0100 +@@ -41,7 +41,7 @@ .. c:function:: PyObject* PyImport_ImportModuleEx(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist) @@ -239,7 +261,7 @@ Import a module. This is best described by referring to the built-in Python function :func:`__import__`. -@@ -120,7 +120,7 @@ Importing Modules +@@ -120,7 +120,7 @@ .. c:function:: PyObject* PyImport_ExecCodeModule(const char *name, PyObject *co) @@ -248,9 +270,11 @@ Given a module name (possibly of the form ``package.module``) and a code object read from a Python bytecode file or obtained from the built-in function ---- a/Doc/c-api/init.rst -+++ b/Doc/c-api/init.rst -@@ -233,9 +233,9 @@ Initializing and finalizing the interpre +Index: Python-3.10.19/Doc/c-api/init.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/init.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/init.rst 2025-12-19 23:10:15.393955078 +0100 +@@ -233,9 +233,9 @@ single: PyEval_InitThreads() single: modules (in module sys) single: path (in module sys) @@ -263,7 +287,7 @@ triple: module; search; path single: PySys_SetArgv() single: PySys_SetArgvEx() -@@ -895,7 +895,7 @@ code, or when embedding the Python inter +@@ -895,7 +895,7 @@ .. deprecated-removed:: 3.9 3.11 @@ -272,7 +296,7 @@ .. c:function:: int PyEval_ThreadsInitialized() -@@ -1315,9 +1315,9 @@ function. You can create and destroy the +@@ -1315,9 +1315,9 @@ .. c:function:: PyThreadState* Py_NewInterpreter() .. index:: @@ -285,9 +309,11 @@ single: stdout (in module sys) single: stderr (in module sys) single: stdin (in module sys) ---- a/Doc/c-api/intro.rst -+++ b/Doc/c-api/intro.rst -@@ -226,7 +226,7 @@ complete listing. +Index: Python-3.10.19/Doc/c-api/intro.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/intro.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/intro.rst 2025-12-19 23:10:15.394470650 +0100 +@@ -226,7 +226,7 @@ Objects, Types and Reference Counts =================================== @@ -296,7 +322,7 @@ Most Python/C API functions have one or more arguments as well as a return value of type :c:expr:`PyObject*`. This type is a pointer to an opaque data type -@@ -677,9 +677,9 @@ interpreter can only be used after the i +@@ -677,9 +677,9 @@ .. index:: single: Py_Initialize() @@ -309,8 +335,10 @@ triple: module; search; path single: path (in module sys) ---- a/Doc/c-api/list.rst -+++ b/Doc/c-api/list.rst +Index: Python-3.10.19/Doc/c-api/list.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/list.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/list.rst 2025-12-19 23:10:15.394763148 +0100 @@ -5,7 +5,7 @@ List Objects ------------ @@ -320,7 +348,7 @@ .. c:type:: PyListObject -@@ -45,7 +45,7 @@ List Objects +@@ -45,7 +45,7 @@ .. c:function:: Py_ssize_t PyList_Size(PyObject *list) @@ -329,7 +357,7 @@ Return the length of the list object in *list*; this is equivalent to ``len(list)`` on a list object. -@@ -138,7 +138,7 @@ List Objects +@@ -138,7 +138,7 @@ .. c:function:: PyObject* PyList_AsTuple(PyObject *list) @@ -338,8 +366,10 @@ Return a new tuple object containing the contents of *list*; equivalent to ``tuple(list)``. ---- a/Doc/c-api/long.rst -+++ b/Doc/c-api/long.rst +Index: Python-3.10.19/Doc/c-api/long.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/long.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/long.rst 2025-12-19 23:10:15.394948159 +0100 @@ -5,8 +5,8 @@ Integer Objects --------------- @@ -351,9 +381,11 @@ All integers are implemented as "long" integer objects of arbitrary size. ---- a/Doc/c-api/mapping.rst -+++ b/Doc/c-api/mapping.rst -@@ -20,7 +20,7 @@ See also :c:func:`PyObject_GetItem`, :c: +Index: Python-3.10.19/Doc/c-api/mapping.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/mapping.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/mapping.rst 2025-12-19 23:10:15.395138967 +0100 +@@ -20,7 +20,7 @@ .. c:function:: Py_ssize_t PyMapping_Size(PyObject *o) Py_ssize_t PyMapping_Length(PyObject *o) @@ -362,8 +394,10 @@ Returns the number of keys in object *o* on success, and ``-1`` on failure. This is equivalent to the Python expression ``len(o)``. ---- a/Doc/c-api/memoryview.rst -+++ b/Doc/c-api/memoryview.rst +Index: Python-3.10.19/Doc/c-api/memoryview.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/memoryview.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/memoryview.rst 2025-12-19 23:10:15.395300231 +0100 @@ -3,7 +3,7 @@ .. _memoryview-objects: @@ -373,8 +407,10 @@ MemoryView objects ------------------ ---- a/Doc/c-api/method.rst -+++ b/Doc/c-api/method.rst +Index: Python-3.10.19/Doc/c-api/method.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/method.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/method.rst 2025-12-19 23:10:15.395505706 +0100 @@ -5,7 +5,7 @@ Instance Method Objects ----------------------- @@ -384,7 +420,7 @@ An instance method is a wrapper for a :c:data:`PyCFunction` and the new way to bind a :c:data:`PyCFunction` to a class object. It replaces the former call -@@ -47,7 +47,7 @@ to bind a :c:data:`PyCFunction` to a cla +@@ -47,7 +47,7 @@ Method Objects -------------- @@ -393,8 +429,10 @@ Methods are bound function objects. Methods are always bound to an instance of a user-defined class. Unbound methods (methods bound to a class object) are ---- a/Doc/c-api/module.rst -+++ b/Doc/c-api/module.rst +Index: Python-3.10.19/Doc/c-api/module.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/module.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/module.rst 2025-12-19 23:10:15.395739397 +0100 @@ -5,7 +5,7 @@ Module Objects -------------- @@ -404,8 +442,10 @@ .. c:var:: PyTypeObject PyModule_Type ---- a/Doc/c-api/none.rst -+++ b/Doc/c-api/none.rst +Index: Python-3.10.19/Doc/c-api/none.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/none.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/none.rst 2025-12-19 23:10:15.395955557 +0100 @@ -5,7 +5,7 @@ The ``None`` Object ------------------- @@ -415,9 +455,11 @@ Note that the :c:type:`PyTypeObject` for ``None`` is not directly exposed in the Python/C API. Since ``None`` is a singleton, testing for object identity (using ---- a/Doc/c-api/number.rst -+++ b/Doc/c-api/number.rst -@@ -64,7 +64,7 @@ Number Protocol +Index: Python-3.10.19/Doc/c-api/number.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/number.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/number.rst 2025-12-19 23:10:15.396155514 +0100 +@@ -64,7 +64,7 @@ .. c:function:: PyObject* PyNumber_Divmod(PyObject *o1, PyObject *o2) @@ -426,7 +468,7 @@ See the built-in function :func:`divmod`. Returns ``NULL`` on failure. This is the equivalent of the Python expression ``divmod(o1, o2)``. -@@ -72,7 +72,7 @@ Number Protocol +@@ -72,7 +72,7 @@ .. c:function:: PyObject* PyNumber_Power(PyObject *o1, PyObject *o2, PyObject *o3) @@ -435,7 +477,7 @@ See the built-in function :func:`pow`. Returns ``NULL`` on failure. This is the equivalent of the Python expression ``pow(o1, o2, o3)``, where *o3* is optional. -@@ -94,7 +94,7 @@ Number Protocol +@@ -94,7 +94,7 @@ .. c:function:: PyObject* PyNumber_Absolute(PyObject *o) @@ -444,7 +486,7 @@ Returns the absolute value of *o*, or ``NULL`` on failure. This is the equivalent of the Python expression ``abs(o)``. -@@ -192,7 +192,7 @@ Number Protocol +@@ -192,7 +192,7 @@ .. c:function:: PyObject* PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject *o3) @@ -453,7 +495,7 @@ See the built-in function :func:`pow`. Returns ``NULL`` on failure. The operation is done *in-place* when *o1* supports it. This is the equivalent of the Python -@@ -238,7 +238,7 @@ Number Protocol +@@ -238,7 +238,7 @@ .. c:function:: PyObject* PyNumber_Long(PyObject *o) @@ -462,7 +504,7 @@ Returns the *o* converted to an integer object on success, or ``NULL`` on failure. This is the equivalent of the Python expression ``int(o)``. -@@ -246,7 +246,7 @@ Number Protocol +@@ -246,7 +246,7 @@ .. c:function:: PyObject* PyNumber_Float(PyObject *o) @@ -471,9 +513,11 @@ Returns the *o* converted to a float object on success, or ``NULL`` on failure. This is the equivalent of the Python expression ``float(o)``. ---- a/Doc/c-api/object.rst -+++ b/Doc/c-api/object.rst -@@ -172,7 +172,7 @@ Object Protocol +Index: Python-3.10.19/Doc/c-api/object.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/object.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/object.rst 2025-12-19 23:10:15.396357217 +0100 +@@ -172,7 +172,7 @@ .. c:function:: PyObject* PyObject_Repr(PyObject *o) @@ -482,7 +526,7 @@ Compute a string representation of object *o*. Returns the string representation on success, ``NULL`` on failure. This is the equivalent of the -@@ -184,7 +184,7 @@ Object Protocol +@@ -184,7 +184,7 @@ .. c:function:: PyObject* PyObject_ASCII(PyObject *o) @@ -491,7 +535,7 @@ As :c:func:`PyObject_Repr`, compute a string representation of object *o*, but escape the non-ASCII characters in the string returned by -@@ -209,7 +209,7 @@ Object Protocol +@@ -209,7 +209,7 @@ .. c:function:: PyObject* PyObject_Bytes(PyObject *o) @@ -500,7 +544,7 @@ Compute a bytes representation of object *o*. ``NULL`` is returned on failure and a bytes object on success. This is equivalent to the Python -@@ -260,7 +260,7 @@ Object Protocol +@@ -260,7 +260,7 @@ .. c:function:: Py_hash_t PyObject_Hash(PyObject *o) @@ -509,7 +553,7 @@ Compute and return the hash value of an object *o*. On failure, return ``-1``. This is the equivalent of the Python expression ``hash(o)``. -@@ -294,7 +294,7 @@ Object Protocol +@@ -294,7 +294,7 @@ .. c:function:: PyObject* PyObject_Type(PyObject *o) @@ -518,7 +562,7 @@ When *o* is non-``NULL``, returns a type object corresponding to the object type of object *o*. On failure, raises :exc:`SystemError` and returns ``NULL``. This -@@ -315,7 +315,7 @@ Object Protocol +@@ -315,7 +315,7 @@ .. c:function:: Py_ssize_t PyObject_Size(PyObject *o) Py_ssize_t PyObject_Length(PyObject *o) @@ -527,9 +571,11 @@ Return the length of object *o*. If the object *o* provides either the sequence and mapping protocols, the sequence length is returned. On error, ``-1`` is ---- a/Doc/c-api/sequence.rst -+++ b/Doc/c-api/sequence.rst -@@ -18,7 +18,7 @@ Sequence Protocol +Index: Python-3.10.19/Doc/c-api/sequence.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/sequence.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/sequence.rst 2025-12-19 23:10:15.396594610 +0100 +@@ -18,7 +18,7 @@ .. c:function:: Py_ssize_t PySequence_Size(PyObject *o) Py_ssize_t PySequence_Length(PyObject *o) @@ -538,7 +584,7 @@ Returns the number of objects in sequence *o* on success, and ``-1`` on failure. This is equivalent to the Python expression ``len(o)``. -@@ -120,7 +120,7 @@ Sequence Protocol +@@ -120,7 +120,7 @@ .. c:function:: PyObject* PySequence_Tuple(PyObject *o) @@ -547,9 +593,11 @@ Return a tuple object with the same contents as the sequence or iterable *o*, or ``NULL`` on failure. If *o* is a tuple, a new reference will be returned, ---- a/Doc/c-api/set.rst -+++ b/Doc/c-api/set.rst -@@ -9,8 +9,8 @@ Set Objects +Index: Python-3.10.19/Doc/c-api/set.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/set.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/set.rst 2025-12-19 23:10:15.396771519 +0100 +@@ -9,8 +9,8 @@ .. index:: @@ -560,7 +608,7 @@ This section details the public API for :class:`set` and :class:`frozenset` objects. Any functionality not listed below is best accessed using either -@@ -107,7 +107,7 @@ or :class:`frozenset` or instances of th +@@ -107,7 +107,7 @@ .. c:function:: Py_ssize_t PySet_Size(PyObject *anyset) @@ -569,9 +617,11 @@ Return the length of a :class:`set` or :class:`frozenset` object. Equivalent to ``len(anyset)``. Raises a :exc:`PyExc_SystemError` if *anyset* is not a ---- a/Doc/c-api/structures.rst -+++ b/Doc/c-api/structures.rst -@@ -351,7 +351,7 @@ method. +Index: Python-3.10.19/Doc/c-api/structures.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/structures.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/structures.rst 2025-12-19 23:10:15.396945495 +0100 +@@ -351,7 +351,7 @@ .. data:: METH_CLASS @@ -580,7 +630,7 @@ The method will be passed the type object as the first parameter rather than an instance of the type. This is used to create *class methods*, -@@ -361,7 +361,7 @@ method. +@@ -361,7 +361,7 @@ .. data:: METH_STATIC @@ -589,8 +639,10 @@ The method will be passed ``NULL`` as the first parameter rather than an instance of the type. This is used to create *static methods*, similar to ---- a/Doc/c-api/tuple.rst -+++ b/Doc/c-api/tuple.rst +Index: Python-3.10.19/Doc/c-api/tuple.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/tuple.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/tuple.rst 2025-12-19 23:10:15.397144544 +0100 @@ -5,7 +5,7 @@ Tuple Objects ------------- @@ -600,8 +652,10 @@ .. c:type:: PyTupleObject ---- a/Doc/c-api/type.rst -+++ b/Doc/c-api/type.rst +Index: Python-3.10.19/Doc/c-api/type.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/type.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/type.rst 2025-12-19 23:10:15.397329764 +0100 @@ -5,7 +5,7 @@ Type Objects ------------ @@ -611,9 +665,11 @@ .. c:type:: PyTypeObject ---- a/Doc/c-api/typeobj.rst -+++ b/Doc/c-api/typeobj.rst -@@ -803,7 +803,7 @@ and :c:type:`PyType_Type` effectively ac +Index: Python-3.10.19/Doc/c-api/typeobj.rst +=================================================================== +--- Python-3.10.19.orig/Doc/c-api/typeobj.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/c-api/typeobj.rst 2025-12-19 23:10:15.397446400 +0100 +@@ -803,7 +803,7 @@ .. c:member:: reprfunc PyTypeObject.tp_repr @@ -622,7 +678,7 @@ An optional pointer to a function that implements the built-in function :func:`repr`. -@@ -868,7 +868,7 @@ and :c:type:`PyType_Type` effectively ac +@@ -868,7 +868,7 @@ .. c:member:: hashfunc PyTypeObject.tp_hash @@ -631,9 +687,11 @@ An optional pointer to a function that implements the built-in function :func:`hash`. ---- a/Doc/conf.py -+++ b/Doc/conf.py -@@ -61,6 +61,11 @@ smartquotes_excludes = { +Index: Python-3.10.19/Doc/conf.py +=================================================================== +--- Python-3.10.19.orig/Doc/conf.py 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/conf.py 2025-12-19 23:10:15.398083707 +0100 +@@ -61,6 +61,11 @@ # Avoid a warning with Sphinx >= 2.0 master_doc = 'contents' @@ -645,9 +703,11 @@ # Options for HTML output # ----------------------- ---- a/Doc/extending/newtypes.rst -+++ b/Doc/extending/newtypes.rst -@@ -149,7 +149,7 @@ done. This can be done using the :c:fun +Index: Python-3.10.19/Doc/extending/newtypes.rst +=================================================================== +--- Python-3.10.19.orig/Doc/extending/newtypes.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/extending/newtypes.rst 2025-12-19 23:10:15.398298470 +0100 +@@ -149,7 +149,7 @@ .. index:: single: string; object representation @@ -656,9 +716,11 @@ Object Presentation ------------------- ---- a/Doc/library/_thread.rst -+++ b/Doc/library/_thread.rst -@@ -204,7 +204,7 @@ In addition to these methods, lock objec +Index: Python-3.10.19/Doc/library/_thread.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/_thread.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/_thread.rst 2025-12-19 23:10:15.398608428 +0100 +@@ -204,7 +204,7 @@ **Caveats:** @@ -667,8 +729,10 @@ * Threads interact strangely with interrupts: the :exc:`KeyboardInterrupt` exception will be received by an arbitrary thread. (When the :mod:`signal` ---- a/Doc/library/binascii.rst -+++ b/Doc/library/binascii.rst +Index: Python-3.10.19/Doc/library/binascii.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/binascii.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/binascii.rst 2025-12-19 23:10:15.398847287 +0100 @@ -6,9 +6,9 @@ representations. @@ -682,9 +746,11 @@ -------------- ---- a/Doc/library/cmath.rst -+++ b/Doc/library/cmath.rst -@@ -301,7 +301,7 @@ Constants +Index: Python-3.10.19/Doc/library/cmath.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/cmath.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/cmath.rst 2025-12-19 23:10:15.399084959 +0100 +@@ -301,7 +301,7 @@ .. versionadded:: 3.6 @@ -693,9 +759,11 @@ Note that the selection of functions is similar, but not identical, to that in module :mod:`math`. The reason for having two modules is that some users aren't ---- a/Doc/library/copy.rst -+++ b/Doc/library/copy.rst -@@ -68,7 +68,7 @@ Shallow copies of dictionaries can be ma +Index: Python-3.10.19/Doc/library/copy.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/copy.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/copy.rst 2025-12-19 23:10:15.399270528 +0100 +@@ -68,7 +68,7 @@ of lists by assigning a slice of the entire list, for example, ``copied_list = original_list[:]``. @@ -704,8 +772,10 @@ Classes can use the same interfaces to control copying that they use to control pickling. See the description of module :mod:`pickle` for information on these ---- a/Doc/library/copyreg.rst -+++ b/Doc/library/copyreg.rst +Index: Python-3.10.19/Doc/library/copyreg.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/copyreg.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/copyreg.rst 2025-12-19 23:10:15.399461755 +0100 @@ -7,8 +7,8 @@ **Source code:** :source:`Lib/copyreg.py` @@ -717,9 +787,11 @@ -------------- ---- a/Doc/library/dis.rst -+++ b/Doc/library/dis.rst -@@ -1207,7 +1207,7 @@ All of the following opcodes use their a +Index: Python-3.10.19/Doc/library/dis.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/dis.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/dis.rst 2025-12-19 23:10:15.399767732 +0100 +@@ -1207,7 +1207,7 @@ .. opcode:: BUILD_SLICE (argc) @@ -728,8 +800,10 @@ Pushes a slice object on the stack. *argc* must be 2 or 3. If it is 2, ``slice(TOS1, TOS)`` is pushed; if it is 3, ``slice(TOS2, TOS1, TOS)`` is ---- a/Doc/library/email.compat32-message.rst -+++ b/Doc/library/email.compat32-message.rst +Index: Python-3.10.19/Doc/library/email.compat32-message.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/email.compat32-message.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/email.compat32-message.rst 2025-12-19 23:10:15.400042699 +0100 @@ -7,6 +7,7 @@ :synopsis: The base class representing email messages in a fashion backward compatible with Python 3.2 @@ -738,9 +812,11 @@ The :class:`Message` class is very similar to the ---- a/Doc/library/exceptions.rst -+++ b/Doc/library/exceptions.rst -@@ -4,8 +4,8 @@ Built-in Exceptions +Index: Python-3.10.19/Doc/library/exceptions.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/exceptions.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/exceptions.rst 2025-12-19 23:10:15.400305095 +0100 +@@ -4,8 +4,8 @@ =================== .. index:: @@ -751,7 +827,7 @@ In Python, all exceptions must be instances of a class that derives from :class:`BaseException`. In a :keyword:`try` statement with an :keyword:`except` -@@ -14,7 +14,7 @@ classes derived from that class (but not +@@ -14,7 +14,7 @@ derived). Two exception classes that are not related via subclassing are never equivalent, even if they have the same name. @@ -760,7 +836,7 @@ The built-in exceptions listed below can be generated by the interpreter or built-in functions. Except where mentioned, they have an "associated value" -@@ -160,7 +160,7 @@ The following exceptions are the excepti +@@ -160,7 +160,7 @@ .. exception:: AssertionError @@ -769,7 +845,7 @@ Raised when an :keyword:`assert` statement fails. -@@ -303,7 +303,7 @@ The following exceptions are the excepti +@@ -303,7 +303,7 @@ .. exception:: OSError([arg]) OSError(errno, strerror[, filename[, winerror[, filename2]]]) @@ -778,8 +854,10 @@ This exception is raised when a system function returns a system-related error, including I/O failures such as "file not found" or "disk full" ---- a/Doc/library/fnmatch.rst -+++ b/Doc/library/fnmatch.rst +Index: Python-3.10.19/Doc/library/fnmatch.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/fnmatch.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/fnmatch.rst 2025-12-19 23:10:15.400595567 +0100 @@ -8,7 +8,7 @@ .. index:: single: filenames; wildcard expansion @@ -789,7 +867,7 @@ -------------- -@@ -38,7 +38,7 @@ special characters used in shell-style w +@@ -38,7 +38,7 @@ For a literal match, wrap the meta-characters in brackets. For example, ``'[?]'`` matches the character ``'?'``. @@ -798,9 +876,11 @@ Note that the filename separator (``'/'`` on Unix) is *not* special to this module. See module :mod:`glob` for pathname expansion (:mod:`glob` uses ---- a/Doc/library/functions.rst -+++ b/Doc/library/functions.rst -@@ -548,7 +548,7 @@ are always available. They are listed h +Index: Python-3.10.19/Doc/library/functions.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/functions.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/functions.rst 2025-12-19 23:10:15.400828071 +0100 +@@ -548,7 +548,7 @@ Raises an :ref:`auditing event ` ``exec`` with the code object as the argument. Code compilation events may also be raised. @@ -809,7 +889,7 @@ .. function:: exec(object[, globals[, locals]]) -@@ -1314,7 +1314,7 @@ are always available. They are listed h +@@ -1314,7 +1314,7 @@ single: I/O control; buffering single: binary mode single: text mode @@ -818,7 +898,7 @@ See also the file handling modules, such as :mod:`fileinput`, :mod:`io` (where :func:`open` is declared), :mod:`os`, :mod:`os.path`, :mod:`tempfile`, -@@ -1799,7 +1799,7 @@ are always available. They are listed h +@@ -1799,7 +1799,7 @@ .. class:: type(object) type(name, bases, dict, **kwds) @@ -827,7 +907,7 @@ With one argument, return the type of an *object*. The return value is a type object and generally the same object as returned by -@@ -1954,8 +1954,8 @@ are always available. They are listed h +@@ -1954,8 +1954,8 @@ .. function:: __import__(name, globals=None, locals=None, fromlist=(), level=0) .. index:: @@ -838,8 +918,10 @@ .. note:: ---- a/Doc/library/http.client.rst -+++ b/Doc/library/http.client.rst +Index: Python-3.10.19/Doc/library/http.client.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/http.client.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/http.client.rst 2025-12-19 23:10:15.401177908 +0100 @@ -10,7 +10,7 @@ pair: HTTP; protocol single: HTTP; http.client (standard module) @@ -849,8 +931,10 @@ -------------- ---- a/Doc/library/imp.rst -+++ b/Doc/library/imp.rst +Index: Python-3.10.19/Doc/library/imp.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/imp.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/imp.rst 2025-12-19 23:10:15.401419561 +0100 @@ -10,7 +10,7 @@ .. deprecated:: 3.4 The :mod:`imp` module is deprecated in favor of :mod:`importlib`. @@ -860,9 +944,11 @@ -------------- ---- a/Doc/library/internet.rst -+++ b/Doc/library/internet.rst -@@ -9,7 +9,7 @@ Internet Protocols and Support +Index: Python-3.10.19/Doc/library/internet.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/internet.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/internet.rst 2025-12-19 23:10:15.401643543 +0100 +@@ -9,7 +9,7 @@ single: Internet single: World Wide Web @@ -871,9 +957,11 @@ The modules described in this chapter implement internet protocols and support for related technology. They are all implemented in Python. Most of these ---- a/Doc/library/locale.rst -+++ b/Doc/library/locale.rst -@@ -16,7 +16,7 @@ functionality. The POSIX locale mechanis +Index: Python-3.10.19/Doc/library/locale.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/locale.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/locale.rst 2025-12-19 23:10:15.401831697 +0100 +@@ -16,7 +16,7 @@ certain cultural issues in an application, without requiring the programmer to know all the specifics of each country where the software is executed. @@ -882,7 +970,7 @@ The :mod:`locale` module is implemented on top of the :mod:`_locale` module, which in turn uses an ANSI C locale implementation if available. -@@ -452,7 +452,7 @@ The :mod:`locale` module defines the fol +@@ -452,7 +452,7 @@ .. data:: LC_CTYPE @@ -891,9 +979,11 @@ Locale category for the character type functions. Depending on the settings of this category, the functions of module :mod:`string` dealing with case change ---- a/Doc/library/marshal.rst -+++ b/Doc/library/marshal.rst -@@ -15,8 +15,8 @@ undocumented on purpose; it may change b +Index: Python-3.10.19/Doc/library/marshal.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/marshal.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/marshal.rst 2025-12-19 23:10:15.402080194 +0100 +@@ -15,8 +15,8 @@ rarely does). [#]_ .. index:: @@ -904,9 +994,11 @@ This is not a general "persistence" module. For general persistence and transfer of Python objects through RPC calls, see the modules :mod:`pickle` and ---- a/Doc/library/os.path.rst -+++ b/Doc/library/os.path.rst -@@ -159,7 +159,7 @@ the :mod:`glob` module.) +Index: Python-3.10.19/Doc/library/os.path.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/os.path.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/os.path.rst 2025-12-19 23:10:15.402271561 +0100 +@@ -159,7 +159,7 @@ On Unix and Windows, return the argument with an initial component of ``~`` or ``~user`` replaced by that *user*'s home directory. @@ -915,9 +1007,11 @@ On Unix, an initial ``~`` is replaced by the environment variable :envvar:`HOME` if it is set; otherwise the current user's home directory is looked up in the ---- a/Doc/library/os.rst -+++ b/Doc/library/os.rst -@@ -1136,7 +1136,7 @@ or `the MSDN ` sequence operations, along with the additional methods described below. -@@ -2422,10 +2422,10 @@ Binary Sequence Types --- :class:`bytes` +@@ -2422,10 +2422,10 @@ ================================================================================= .. index:: @@ -1367,7 +1481,7 @@ The core built-in types for manipulating binary data are :class:`bytes` and :class:`bytearray`. They are supported by :class:`memoryview` which uses -@@ -2440,7 +2440,7 @@ The :mod:`array` module supports efficie +@@ -2440,7 +2440,7 @@ Bytes Objects ------------- @@ -1376,7 +1490,7 @@ Bytes objects are immutable sequences of single bytes. Since many major binary protocols are based on the ASCII text encoding, bytes objects offer -@@ -2547,7 +2547,7 @@ always convert a bytes object into a lis +@@ -2547,7 +2547,7 @@ Bytearray Objects ----------------- @@ -1385,7 +1499,7 @@ :class:`bytearray` objects are a mutable counterpart to :class:`bytes` objects. -@@ -4123,7 +4123,7 @@ copying. +@@ -4123,7 +4123,7 @@ Set Types --- :class:`set`, :class:`frozenset` ============================================== @@ -1394,7 +1508,7 @@ A :dfn:`set` object is an unordered collection of distinct :term:`hashable` objects. Common uses include membership testing, removing duplicates from a sequence, and -@@ -4325,12 +4325,12 @@ Mapping Types --- :class:`dict` +@@ -4325,12 +4325,12 @@ =============================== .. index:: @@ -1411,7 +1525,7 @@ A :term:`mapping` object maps :term:`hashable` values to arbitrary objects. Mappings are mutable objects. There is currently only one standard mapping -@@ -4794,7 +4794,7 @@ Generic Alias Type +@@ -4794,7 +4794,7 @@ ------------------ .. index:: @@ -1420,7 +1534,7 @@ pair: Generic; Alias ``GenericAlias`` objects are generally created by -@@ -5040,7 +5040,7 @@ Union Type +@@ -5040,7 +5040,7 @@ ---------- .. index:: @@ -1429,7 +1543,7 @@ pair: union; type A union object holds the value of the ``|`` (bitwise or) operation on -@@ -5197,7 +5197,7 @@ See :ref:`function` for more information +@@ -5197,7 +5197,7 @@ Methods ------- @@ -1438,7 +1552,7 @@ Methods are functions that are called using the attribute notation. There are two flavors: built-in methods (such as :meth:`append` on lists) and class -@@ -5244,7 +5244,7 @@ Code Objects +@@ -5244,7 +5244,7 @@ ------------ .. index:: @@ -1447,7 +1561,7 @@ single: __code__ (function object attribute) Code objects are used by the implementation to represent "pseudo-compiled" -@@ -5258,8 +5258,8 @@ Accessing ``__code__`` raises an :ref:`a +@@ -5258,8 +5258,8 @@ ``object.__getattr__`` with arguments ``obj`` and ``"__code__"``. .. index:: @@ -1458,7 +1572,7 @@ A code object can be executed or evaluated by passing it (instead of a source string) to the :func:`exec` or :func:`eval` built-in functions. -@@ -5273,8 +5273,8 @@ Type Objects +@@ -5273,8 +5273,8 @@ ------------ .. index:: @@ -1469,9 +1583,11 @@ Type objects represent the various object types. An object's type is accessed by the built-in function :func:`type`. There are no special operations on ---- a/Doc/library/sys.rst -+++ b/Doc/library/sys.rst -@@ -398,7 +398,7 @@ always available. +Index: Python-3.10.19/Doc/library/sys.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/sys.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/sys.rst 2025-12-19 23:10:15.406880072 +0100 +@@ -398,7 +398,7 @@ an except clause." For any stack frame, only information about the exception being currently handled is accessible. @@ -1480,9 +1596,11 @@ If no exception is being handled anywhere on the stack, a tuple containing three ``None`` values is returned. Otherwise, the values returned are ---- a/Doc/library/traceback.rst -+++ b/Doc/library/traceback.rst -@@ -14,7 +14,7 @@ interpreter when it prints a stack trace +Index: Python-3.10.19/Doc/library/traceback.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/traceback.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/traceback.rst 2025-12-19 23:10:15.407220202 +0100 +@@ -14,7 +14,7 @@ stack traces under program control, such as in a "wrapper" around the interpreter. @@ -1491,9 +1609,11 @@ The module uses traceback objects --- this is the object type that is stored in the :data:`sys.last_traceback` variable and returned as the third item from ---- a/Doc/library/types.rst -+++ b/Doc/library/types.rst -@@ -146,7 +146,7 @@ Standard names are defined for the follo +Index: Python-3.10.19/Doc/library/types.rst +=================================================================== +--- Python-3.10.19.orig/Doc/library/types.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/library/types.rst 2025-12-19 23:10:15.407463391 +0100 +@@ -146,7 +146,7 @@ .. class:: CodeType(**kwargs) @@ -1502,9 +1622,11 @@ The type for code objects such as returned by :func:`compile`. ---- a/Doc/reference/compound_stmts.rst -+++ b/Doc/reference/compound_stmts.rst -@@ -84,9 +84,9 @@ The :keyword:`!if` statement +Index: Python-3.10.19/Doc/reference/compound_stmts.rst +=================================================================== +--- Python-3.10.19.orig/Doc/reference/compound_stmts.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/reference/compound_stmts.rst 2025-12-19 23:10:15.407774397 +0100 +@@ -84,9 +84,9 @@ ============================ .. index:: @@ -1517,7 +1639,7 @@ single: : (colon); compound statement The :keyword:`if` statement is used for conditional execution: -@@ -109,8 +109,8 @@ The :keyword:`!while` statement +@@ -109,8 +109,8 @@ =============================== .. index:: @@ -1528,7 +1650,7 @@ pair: loop; statement single: : (colon); compound statement -@@ -127,8 +127,8 @@ suite of the :keyword:`!else` clause, if +@@ -127,8 +127,8 @@ terminates. .. index:: @@ -1539,7 +1661,7 @@ A :keyword:`break` statement executed in the first suite terminates the loop without executing the :keyword:`!else` clause's suite. A :keyword:`continue` -@@ -142,12 +142,12 @@ The :keyword:`!for` statement +@@ -142,12 +142,12 @@ ============================= .. index:: @@ -1556,7 +1678,7 @@ single: : (colon); compound statement The :keyword:`for` statement is used to iterate over the elements of a sequence -@@ -167,8 +167,8 @@ is empty or an iterator raises a :exc:`S +@@ -167,8 +167,8 @@ the :keyword:`!else` clause, if present, is executed, and the loop terminates. .. index:: @@ -1567,7 +1689,7 @@ A :keyword:`break` statement executed in the first suite terminates the loop without executing the :keyword:`!else` clause's suite. A :keyword:`continue` -@@ -188,7 +188,7 @@ those made in the suite of the for-loop: +@@ -188,7 +188,7 @@ .. index:: @@ -1576,7 +1698,7 @@ Names in the target list are not deleted when the loop is finished, but if the sequence is empty, they will not have been assigned to at all by the loop. Hint: -@@ -204,11 +204,11 @@ The :keyword:`!try` statement +@@ -204,11 +204,11 @@ ============================= .. index:: @@ -1593,7 +1715,7 @@ single: : (colon); compound statement The :keyword:`try` statement specifies exception handlers and/or cleanup code -@@ -275,8 +275,8 @@ traceback attached to them, they form a +@@ -275,8 +275,8 @@ keeping all locals in that frame alive until the next garbage collection occurs. .. index:: @@ -1604,7 +1726,7 @@ Before an except clause's suite is executed, details about the exception are stored in the :mod:`sys` module and can be accessed via :func:`sys.exc_info`. -@@ -305,10 +305,10 @@ when leaving an exception handler:: +@@ -305,10 +305,10 @@ (None, None, None) .. index:: @@ -1619,7 +1741,7 @@ The optional :keyword:`!else` clause is executed if the control flow leaves the :keyword:`try` suite, no exception was raised, and no :keyword:`return`, -@@ -316,7 +316,7 @@ The optional :keyword:`!else` clause is +@@ -316,7 +316,7 @@ the :keyword:`!else` clause are not handled by the preceding :keyword:`except` clauses. @@ -1628,7 +1750,7 @@ If :keyword:`finally` is present, it specifies a 'cleanup' handler. The :keyword:`try` clause is executed, including any :keyword:`except` and -@@ -341,9 +341,9 @@ The exception information is not availab +@@ -341,9 +341,9 @@ the :keyword:`finally` clause. .. index:: @@ -1641,7 +1763,7 @@ When a :keyword:`return`, :keyword:`break` or :keyword:`continue` statement is executed in the :keyword:`try` suite of a :keyword:`!try`...\ :keyword:`!finally` -@@ -379,8 +379,8 @@ The :keyword:`!with` statement +@@ -379,8 +379,8 @@ ============================== .. index:: @@ -1652,7 +1774,7 @@ single: as; with statement single: , (comma); with statement single: : (colon); compound statement -@@ -496,11 +496,11 @@ The :keyword:`!match` statement +@@ -496,11 +496,11 @@ =============================== .. index:: @@ -1668,7 +1790,7 @@ pair: match; case single: as; match statement single: : (colon); compound statement -@@ -1101,12 +1101,12 @@ Function definitions +@@ -1101,12 +1101,12 @@ ==================== .. index:: @@ -1684,7 +1806,7 @@ pair: function; name pair: name; binding single: () (parentheses); function definition -@@ -1274,8 +1274,8 @@ Class definitions +@@ -1274,8 +1274,8 @@ ================= .. index:: @@ -1695,7 +1817,7 @@ pair: class; definition pair: class; name pair: name; binding -@@ -1374,7 +1374,7 @@ Coroutines +@@ -1374,7 +1374,7 @@ .. versionadded:: 3.5 @@ -1704,7 +1826,7 @@ .. _`async def`: Coroutine function definition -@@ -1385,8 +1385,8 @@ Coroutine function definition +@@ -1385,8 +1385,8 @@ : ["->" `expression`] ":" `suite` .. index:: @@ -1715,7 +1837,7 @@ Execution of Python coroutines can be suspended and resumed at many points (see :term:`coroutine`). :keyword:`await` expressions, :keyword:`async for` and -@@ -1408,7 +1408,7 @@ An example of a coroutine function:: +@@ -1408,7 +1408,7 @@ ``await`` and ``async`` are now keywords; previously they were only treated as such inside the body of a coroutine function. @@ -1724,7 +1846,7 @@ .. _`async for`: The :keyword:`!async for` statement -@@ -1453,7 +1453,7 @@ It is a :exc:`SyntaxError` to use an ``a +@@ -1453,7 +1453,7 @@ body of a coroutine function. @@ -1733,9 +1855,11 @@ .. _`async with`: The :keyword:`!async with` statement ---- a/Doc/reference/datamodel.rst -+++ b/Doc/reference/datamodel.rst -@@ -21,8 +21,8 @@ conformance to Von Neumann's model of a +Index: Python-3.10.19/Doc/reference/datamodel.rst +=================================================================== +--- Python-3.10.19.orig/Doc/reference/datamodel.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/reference/datamodel.rst 2025-12-19 23:10:15.408446345 +0100 +@@ -21,8 +21,8 @@ represented by objects.) .. index:: @@ -1746,7 +1870,7 @@ single: identity of an object single: value of an object single: type of an object -@@ -142,7 +142,7 @@ attributes.' These are attributes that +@@ -142,7 +142,7 @@ are not intended for general use. Their definition may change in the future. None @@ -1755,7 +1879,7 @@ This type has a single value. There is a single object with this value. This object is accessed through the built-in name ``None``. It is used to signify the -@@ -150,7 +150,7 @@ None +@@ -150,7 +150,7 @@ don't explicitly return anything. Its truth value is false. NotImplemented @@ -1764,7 +1888,7 @@ This type has a single value. There is a single object with this value. This object is accessed through the built-in name ``NotImplemented``. Numeric methods -@@ -171,7 +171,7 @@ NotImplemented +@@ -171,7 +171,7 @@ Ellipsis .. index:: @@ -1773,7 +1897,7 @@ single: ...; ellipsis literal This type has a single value. There is a single object with this value. This -@@ -179,7 +179,7 @@ Ellipsis +@@ -179,7 +179,7 @@ ``Ellipsis``. Its truth value is true. :class:`numbers.Number` @@ -1782,7 +1906,7 @@ These are created by numeric literals and returned as results by arithmetic operators and arithmetic built-in functions. Numeric objects are immutable; -@@ -209,7 +209,7 @@ Ellipsis +@@ -209,7 +209,7 @@ numbers: :class:`numbers.Integral` @@ -1791,7 +1915,7 @@ These represent elements from the mathematical set of integers (positive and negative). -@@ -225,7 +225,7 @@ Ellipsis +@@ -225,7 +225,7 @@ Booleans (:class:`bool`) .. index:: @@ -1800,7 +1924,7 @@ single: False single: True -@@ -242,7 +242,7 @@ Ellipsis +@@ -242,7 +242,7 @@ :class:`numbers.Real` (:class:`float`) .. index:: @@ -1809,7 +1933,7 @@ pair: floating point; number pair: C; language pair: Java; language -@@ -257,7 +257,7 @@ Ellipsis +@@ -257,7 +257,7 @@ :class:`numbers.Complex` (:class:`complex`) .. index:: @@ -1818,7 +1942,7 @@ pair: complex; number These represent complex numbers as a pair of machine-level double precision -@@ -267,8 +267,8 @@ Ellipsis +@@ -267,8 +267,8 @@ Sequences .. index:: @@ -1829,7 +1953,7 @@ single: index operation single: item selection single: subscription -@@ -293,8 +293,8 @@ Sequences +@@ -293,8 +293,8 @@ Immutable sequences .. index:: @@ -1840,7 +1964,7 @@ An object of an immutable sequence type cannot change once it is created. (If the object contains references to other objects, these other objects may be -@@ -308,8 +308,8 @@ Sequences +@@ -308,8 +308,8 @@ Strings .. index:: @@ -1851,7 +1975,7 @@ single: character single: integer single: Unicode -@@ -328,7 +328,7 @@ Sequences +@@ -328,7 +328,7 @@ Tuples .. index:: @@ -1860,7 +1984,7 @@ pair: singleton; tuple pair: empty; tuple -@@ -350,8 +350,8 @@ Sequences +@@ -350,8 +350,8 @@ Mutable sequences .. index:: @@ -1871,7 +1995,7 @@ pair: assignment; statement single: subscription single: slicing -@@ -363,7 +363,7 @@ Sequences +@@ -363,7 +363,7 @@ There are currently two intrinsic mutable sequence types: Lists @@ -1880,7 +2004,7 @@ The items of a list are arbitrary Python objects. Lists are formed by placing a comma-separated list of expressions in square brackets. (Note -@@ -377,15 +377,15 @@ Sequences +@@ -377,15 +377,15 @@ (and hence unhashable), byte arrays otherwise provide the same interface and functionality as immutable :class:`bytes` objects. @@ -1899,7 +2023,7 @@ These represent unordered, finite sets of unique, immutable objects. As such, they cannot be indexed by any subscript. However, they can be iterated over, and -@@ -402,14 +402,14 @@ Set types +@@ -402,14 +402,14 @@ There are currently two intrinsic set types: Sets @@ -1916,7 +2040,7 @@ These represent an immutable set. They are created by the built-in :func:`frozenset` constructor. As a frozenset is immutable and -@@ -418,9 +418,9 @@ Set types +@@ -418,9 +418,9 @@ Mappings .. index:: @@ -1928,7 +2052,7 @@ These represent finite sets of objects indexed by arbitrary index sets. The subscript notation ``a[k]`` selects the item indexed by ``k`` from the mapping -@@ -431,7 +431,7 @@ Mappings +@@ -431,7 +431,7 @@ There is currently a single intrinsic mapping type: Dictionaries @@ -1937,7 +2061,7 @@ These represent finite sets of objects indexed by nearly arbitrary values. The only types of values not acceptable as keys are values containing lists or -@@ -451,8 +451,8 @@ Mappings +@@ -451,8 +451,8 @@ section :ref:`dict`). .. index:: @@ -1948,7 +2072,7 @@ The extension modules :mod:`dbm.ndbm` and :mod:`dbm.gnu` provide additional examples of mapping types, as does the :mod:`collections` -@@ -465,7 +465,7 @@ Mappings +@@ -465,7 +465,7 @@ Callable types .. index:: @@ -1957,7 +2081,7 @@ pair: function; call single: invocation pair: function; argument -@@ -476,8 +476,8 @@ Callable types +@@ -476,8 +476,8 @@ User-defined functions .. index:: pair: user-defined; function @@ -1968,7 +2092,7 @@ A user-defined function object is created by a function definition (see section :ref:`function`). It should be called with an argument list -@@ -580,8 +580,8 @@ Callable types +@@ -580,8 +580,8 @@ Instance methods .. index:: @@ -1979,7 +2103,7 @@ pair: user-defined; method An instance method object combines a class, a class instance and any -@@ -688,8 +688,8 @@ Callable types +@@ -688,8 +688,8 @@ Built-in functions .. index:: @@ -1990,7 +2114,7 @@ pair: C; language A built-in function object is a wrapper around a C function. Examples of -@@ -703,8 +703,8 @@ Callable types +@@ -703,8 +703,8 @@ Built-in methods .. index:: @@ -2001,7 +2125,7 @@ pair: built-in; method This is really a different disguise of a built-in function, this time containing -@@ -727,8 +727,8 @@ Callable types +@@ -727,8 +727,8 @@ Modules .. index:: @@ -2012,7 +2136,7 @@ Modules are a basic organizational unit of Python code, and are created by the :ref:`import system ` as invoked either by the -@@ -805,12 +805,12 @@ Custom classes +@@ -805,12 +805,12 @@ .. XXX: Could we add that MRO doc as an appendix to the language ref? .. index:: @@ -2029,7 +2153,7 @@ pair: class; attribute When a class attribute reference (for class :class:`C`, say) would yield a -@@ -865,8 +865,8 @@ Custom classes +@@ -865,8 +865,8 @@ Class instances .. index:: @@ -2040,7 +2164,7 @@ pair: class; instance pair: class instance; attribute -@@ -892,9 +892,9 @@ Class instances +@@ -892,9 +892,9 @@ dictionary directly. .. index:: @@ -2053,7 +2177,7 @@ Class instances can pretend to be numbers, sequences, or mappings if they have methods with certain special names. See section :ref:`specialnames`. -@@ -908,8 +908,8 @@ Class instances +@@ -908,8 +908,8 @@ I/O objects (also known as file objects) .. index:: @@ -2064,7 +2188,7 @@ single: popen() (in module os) single: makefile() (socket method) single: sys.stdin -@@ -993,7 +993,7 @@ Internal types +@@ -993,7 +993,7 @@ required stack size; :attr:`co_flags` is an integer encoding a number of flags for the interpreter. @@ -2073,7 +2197,7 @@ The following flag bits are defined for :attr:`co_flags`: bit ``0x04`` is set if the function uses the ``*arguments`` syntax to accept an arbitrary number of -@@ -1017,7 +1017,7 @@ Internal types +@@ -1017,7 +1017,7 @@ .. _frame-objects: Frame objects @@ -2082,7 +2206,7 @@ Frame objects represent execution frames. They may occur in traceback objects (see below), and are also passed to registered trace functions. -@@ -1080,7 +1080,7 @@ Internal types +@@ -1080,7 +1080,7 @@ Traceback objects .. index:: @@ -2091,7 +2215,7 @@ pair: stack; trace pair: exception; handler pair: execution; stack -@@ -1114,7 +1114,7 @@ Internal types +@@ -1114,7 +1114,7 @@ single: tb_frame (traceback attribute) single: tb_lineno (traceback attribute) single: tb_lasti (traceback attribute) @@ -2100,7 +2224,7 @@ Special read-only attributes: :attr:`tb_frame` points to the execution frame of the current level; -@@ -1140,7 +1140,7 @@ Internal types +@@ -1140,7 +1140,7 @@ and the ``tb_next`` attribute of existing instances can be updated. Slice objects @@ -2109,7 +2233,7 @@ Slice objects are used to represent slices for :meth:`~object.__getitem__` -@@ -1273,7 +1273,7 @@ Basic customization +@@ -1273,7 +1273,7 @@ .. index:: single: destructor single: finalizer @@ -2118,7 +2242,7 @@ Called when the instance is about to be destroyed. This is also called a finalizer or (improperly) a destructor. If a base class has a -@@ -1374,7 +1374,7 @@ Basic customization +@@ -1374,7 +1374,7 @@ .. method:: object.__bytes__(self) @@ -2127,7 +2251,7 @@ Called by :ref:`bytes ` to compute a byte-string representation of an object. This should return a :class:`bytes` object. -@@ -1382,7 +1382,7 @@ Basic customization +@@ -1382,7 +1382,7 @@ .. index:: single: string; __format__() (object method) pair: string; conversion @@ -2136,7 +2260,7 @@ .. method:: object.__format__(self, format_spec) -@@ -1461,8 +1461,8 @@ Basic customization +@@ -1461,8 +1461,8 @@ .. method:: object.__hash__(self) .. index:: @@ -2147,7 +2271,7 @@ Called by built-in function :func:`hash` and for operations on members of hashed collections including :class:`set`, :class:`frozenset`, and -@@ -1981,7 +1981,7 @@ Metaclasses +@@ -1981,7 +1981,7 @@ .. index:: single: metaclass @@ -2156,7 +2280,7 @@ single: = (equals); class definition By default, classes are constructed using :func:`type`. The class body is -@@ -2395,7 +2395,7 @@ through the object's keys; for sequences +@@ -2395,7 +2395,7 @@ .. method:: object.__len__(self) .. index:: @@ -2165,7 +2289,7 @@ single: __bool__() (object method) Called to implement the built-in function :func:`len`. Should return the length -@@ -2424,7 +2424,7 @@ through the object's keys; for sequences +@@ -2424,7 +2424,7 @@ .. versionadded:: 3.4 @@ -2174,7 +2298,7 @@ .. note:: -@@ -2553,9 +2553,9 @@ left undefined. +@@ -2553,9 +2553,9 @@ object.__or__(self, other) .. index:: @@ -2187,7 +2311,7 @@ These methods are called to implement the binary arithmetic operations (``+``, ``-``, ``*``, ``@``, ``/``, ``//``, ``%``, :func:`divmod`, -@@ -2588,8 +2588,8 @@ left undefined. +@@ -2588,8 +2588,8 @@ object.__ror__(self, other) .. index:: @@ -2198,7 +2322,7 @@ These methods are called to implement the binary arithmetic operations (``+``, ``-``, ``*``, ``@``, ``/``, ``//``, ``%``, :func:`divmod`, -@@ -2600,7 +2600,7 @@ left undefined. +@@ -2600,7 +2600,7 @@ an instance of a class that has an :meth:`__rsub__` method, ``y.__rsub__(x)`` is called if ``x.__sub__(y)`` returns *NotImplemented*. @@ -2207,7 +2331,7 @@ Note that ternary :func:`pow` will not try calling :meth:`__rpow__` (the coercion rules would become too complicated). -@@ -2647,7 +2647,7 @@ left undefined. +@@ -2647,7 +2647,7 @@ object.__abs__(self) object.__invert__(self) @@ -2216,7 +2340,7 @@ Called to implement the unary arithmetic operations (``-``, ``+``, :func:`abs` and ``~``). -@@ -2658,9 +2658,9 @@ left undefined. +@@ -2658,9 +2658,9 @@ object.__float__(self) .. index:: @@ -2229,7 +2353,7 @@ Called to implement the built-in functions :func:`complex`, :func:`int` and :func:`float`. Should return a value -@@ -2685,7 +2685,7 @@ left undefined. +@@ -2685,7 +2685,7 @@ object.__floor__(self) object.__ceil__(self) @@ -2238,7 +2362,7 @@ Called to implement the built-in function :func:`round` and :mod:`math` functions :func:`~math.trunc`, :func:`~math.floor` and :func:`~math.ceil`. -@@ -2710,7 +2710,7 @@ execution of the block of code. Context +@@ -2710,7 +2710,7 @@ used by directly invoking their methods. .. index:: @@ -2247,9 +2371,11 @@ single: context manager Typical uses of context managers include saving and restoring various kinds of ---- a/Doc/reference/executionmodel.rst -+++ b/Doc/reference/executionmodel.rst -@@ -151,7 +151,7 @@ to previously bound variables in the nea +Index: Python-3.10.19/Doc/reference/executionmodel.rst +=================================================================== +--- Python-3.10.19.orig/Doc/reference/executionmodel.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/reference/executionmodel.rst 2025-12-19 23:10:15.408910164 +0100 +@@ -151,7 +151,7 @@ :exc:`SyntaxError` is raised at compile time if the given name does not exist in any enclosing function scope. @@ -2258,9 +2384,11 @@ The namespace for a module is automatically created the first time a module is imported. The main module for a script is always called :mod:`__main__`. ---- a/Doc/reference/expressions.rst -+++ b/Doc/reference/expressions.rst -@@ -71,7 +71,7 @@ An identifier occurring as an atom is a +Index: Python-3.10.19/Doc/reference/expressions.rst +=================================================================== +--- Python-3.10.19.orig/Doc/reference/expressions.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/reference/expressions.rst 2025-12-19 23:10:15.409155938 +0100 +@@ -71,7 +71,7 @@ for lexical definition and section :ref:`naming` for documentation of naming and binding. @@ -2269,7 +2397,7 @@ When the name is bound to an object, evaluation of the atom yields that object. When a name is not bound, an attempt to evaluate it raises a :exc:`NameError` -@@ -240,7 +240,7 @@ List displays +@@ -240,7 +240,7 @@ pair: list; display pair: list; comprehensions pair: empty; list @@ -2278,7 +2406,7 @@ single: [] (square brackets); list expression single: , (comma); expression list -@@ -265,7 +265,7 @@ Set displays +@@ -265,7 +265,7 @@ .. index:: pair: set; display pair: set; comprehensions @@ -2287,7 +2415,7 @@ single: {} (curly brackets); set expression single: , (comma); expression list -@@ -294,7 +294,7 @@ Dictionary displays +@@ -294,7 +294,7 @@ pair: dictionary; display pair: dictionary; comprehensions key, datum, key/datum pair @@ -2296,7 +2424,7 @@ single: {} (curly brackets); dictionary expression single: : (colon); in dictionary expressions single: , (comma); in dictionary displays -@@ -356,7 +356,7 @@ Generator expressions +@@ -356,7 +356,7 @@ .. index:: pair: generator; expression @@ -2305,7 +2433,7 @@ single: () (parentheses); generator expression A generator expression is a compact generator notation in parentheses: -@@ -410,8 +410,8 @@ Yield expressions +@@ -410,8 +410,8 @@ ----------------- .. index:: @@ -2316,7 +2444,7 @@ pair: yield; expression pair: generator; function -@@ -517,7 +517,7 @@ on the right hand side of an assignment +@@ -517,7 +517,7 @@ The proposal that expanded on :pep:`492` by adding generator capabilities to coroutine functions. @@ -2325,7 +2453,7 @@ .. _generator-methods: Generator-iterator methods -@@ -529,7 +529,7 @@ be used to control the execution of a ge +@@ -529,7 +529,7 @@ Note that calling any of the generator methods below when the generator is already executing raises a :exc:`ValueError` exception. @@ -2334,7 +2462,7 @@ .. method:: generator.__next__() -@@ -579,7 +579,7 @@ is already executing raises a :exc:`Valu +@@ -579,7 +579,7 @@ :attr:`~BaseException.__traceback__` attribute stored in *value* may be cleared. @@ -2343,7 +2471,7 @@ .. method:: generator.close() -@@ -691,7 +691,7 @@ of a *finalizer* method see the implemen +@@ -691,7 +691,7 @@ The expression ``yield from `` is a syntax error when used in an asynchronous generator function. @@ -2352,7 +2480,7 @@ .. _asynchronous-generator-methods: Asynchronous generator-iterator methods -@@ -701,7 +701,7 @@ This subsection describes the methods of +@@ -701,7 +701,7 @@ which are used to control the execution of a generator function. @@ -2361,7 +2489,7 @@ .. coroutinemethod:: agen.__anext__() -@@ -748,7 +748,7 @@ which are used to control the execution +@@ -748,7 +748,7 @@ raises a different exception, then when the awaitable is run that exception propagates to the caller of the awaitable. @@ -2370,7 +2498,7 @@ .. coroutinemethod:: agen.aclose() -@@ -795,9 +795,9 @@ An attribute reference is a primary foll +@@ -795,9 +795,9 @@ attributeref: `primary` "." `identifier` .. index:: @@ -2383,7 +2511,7 @@ The primary must evaluate to an object of a type that supports attribute references, which most objects do. This object is then asked to produce the -@@ -818,12 +818,12 @@ Subscriptions +@@ -818,12 +818,12 @@ single: [] (square brackets); subscription .. index:: @@ -2402,7 +2530,7 @@ pair: sequence; item The subscription of an instance of a :ref:`container class ` -@@ -891,10 +891,10 @@ Slicings +@@ -891,10 +891,10 @@ single: , (comma); slicing .. index:: @@ -2417,7 +2545,7 @@ A slicing selects a range of items in a sequence object (e.g., a string, tuple or list). Slicings may be used as expressions or as targets in assignment or -@@ -935,7 +935,7 @@ substituting ``None`` for missing expres +@@ -935,7 +935,7 @@ .. index:: @@ -2426,7 +2554,7 @@ single: call single: argument; call semantics single: () (parentheses); call -@@ -1085,8 +1085,8 @@ a user-defined function: +@@ -1085,8 +1085,8 @@ .. index:: pair: function; call triple: user-defined; function; call @@ -2437,7 +2565,7 @@ The code block for the function is executed, passing it the argument list. The first thing the code block will do is bind the formal parameters to the -@@ -1100,25 +1100,25 @@ a built-in function or method: +@@ -1100,25 +1100,25 @@ pair: built-in function; call pair: method; call pair: built-in method; call @@ -2470,7 +2598,7 @@ pair: class instance; call The corresponding user-defined function is called, with an argument list that is -@@ -1134,7 +1134,7 @@ a class instance: +@@ -1134,7 +1134,7 @@ if that method was called. @@ -2479,7 +2607,7 @@ .. _await: Await expression -@@ -1156,7 +1156,7 @@ The power operator +@@ -1156,7 +1156,7 @@ .. index:: pair: power; operation @@ -2488,7 +2616,7 @@ The power operator binds more tightly than unary operators on its left; it binds less tightly than unary operators on its right. The syntax is: -@@ -1217,7 +1217,7 @@ operation can be overridden with the :me +@@ -1217,7 +1217,7 @@ .. index:: single: inversion @@ -2497,7 +2625,7 @@ The unary ``~`` (invert) operator yields the bitwise inversion of its integer argument. The bitwise inversion of ``x`` is defined as ``-(x+1)``. It only -@@ -1226,7 +1226,7 @@ applies to integral numbers or to custom +@@ -1226,7 +1226,7 @@ @@ -2506,7 +2634,7 @@ In all three cases, if the argument does not have the proper type, a :exc:`TypeError` exception is raised. -@@ -1252,7 +1252,7 @@ operators and one for additive operators +@@ -1252,7 +1252,7 @@ .. index:: single: multiplication @@ -2515,7 +2643,7 @@ The ``*`` (multiplication) operator yields the product of its arguments. The arguments must either both be numbers, or one argument must be an integer and -@@ -1265,7 +1265,7 @@ This operation can be customized using t +@@ -1265,7 +1265,7 @@ .. index:: single: matrix multiplication @@ -2524,7 +2652,7 @@ The ``@`` (at) operator is intended to be used for matrix multiplication. No builtin Python types implement this operator. -@@ -1273,10 +1273,10 @@ builtin Python types implement this oper +@@ -1273,10 +1273,10 @@ .. versionadded:: 3.5 .. index:: @@ -2538,7 +2666,7 @@ The ``/`` (division) and ``//`` (floor division) operators yield the quotient of their arguments. The numeric arguments are first converted to a common type. -@@ -1290,7 +1290,7 @@ This operation can be customized using t +@@ -1290,7 +1290,7 @@ .. index:: single: modulo @@ -2547,7 +2675,7 @@ The ``%`` (modulo) operator yields the remainder from the division of the first argument by the second. The numeric arguments are first converted to a common -@@ -1348,8 +1348,8 @@ Shifting operations +@@ -1348,8 +1348,8 @@ .. index:: pair: shifting; operation @@ -2558,7 +2686,7 @@ The shifting operations have lower priority than the arithmetic operations: -@@ -1362,7 +1362,7 @@ the left or right by the number of bits +@@ -1362,7 +1362,7 @@ This operation can be customized using the special :meth:`__lshift__` and :meth:`__rshift__` methods. @@ -2567,7 +2695,7 @@ A right shift by *n* bits is defined as floor division by ``pow(2,n)``. A left shift by *n* bits is defined as multiplication with ``pow(2,n)``. -@@ -1384,7 +1384,7 @@ Each of the three bitwise operations has +@@ -1384,7 +1384,7 @@ .. index:: pair: bitwise; and @@ -2576,7 +2704,7 @@ The ``&`` operator yields the bitwise AND of its arguments, which must be integers or one of them must be a custom object overriding :meth:`__and__` or -@@ -1393,7 +1393,7 @@ integers or one of them must be a custom +@@ -1393,7 +1393,7 @@ .. index:: pair: bitwise; xor pair: exclusive; or @@ -2585,7 +2713,7 @@ The ``^`` operator yields the bitwise XOR (exclusive OR) of its arguments, which must be integers or one of them must be a custom object overriding :meth:`__xor__` or -@@ -1402,7 +1402,7 @@ must be integers or one of them must be +@@ -1402,7 +1402,7 @@ .. index:: pair: bitwise; or pair: inclusive; or @@ -2594,7 +2722,7 @@ The ``|`` operator yields the bitwise (inclusive) OR of its arguments, which must be integers or one of them must be a custom object overriding :meth:`__or__` or -@@ -1417,12 +1417,12 @@ Comparisons +@@ -1417,12 +1417,12 @@ .. index:: single: comparison pair: C; language @@ -2613,7 +2741,7 @@ Unlike C, all comparison operations in Python have the same priority, which is lower than that of any arithmetic, shifting or bitwise operation. Also unlike -@@ -1652,17 +1652,17 @@ raises the :exc:`IndexError` exception. +@@ -1652,17 +1652,17 @@ if :keyword:`in` raised that exception). .. index:: @@ -2636,7 +2764,7 @@ pair: identity; test -@@ -1702,17 +1702,17 @@ control flow statements, the following v +@@ -1702,17 +1702,17 @@ other values are interpreted as true. User-defined objects can customize their truth value by providing a :meth:`__bool__` method. @@ -2657,7 +2785,7 @@ The expression ``x or y`` first evaluates *x*; if *x* is true, its value is returned; otherwise, *y* is evaluated and the resulting value is returned. -@@ -1837,7 +1837,7 @@ Expression lists +@@ -1837,7 +1837,7 @@ starred_expression: `expression` | (`starred_item` ",")* [`starred_item`] starred_item: `assignment_expression` | "*" `or_expr` @@ -2666,9 +2794,11 @@ Except when part of a list or set display, an expression list containing at least one comma yields a tuple. The length of ---- a/Doc/reference/simple_stmts.rst -+++ b/Doc/reference/simple_stmts.rst -@@ -53,8 +53,8 @@ An expression statement evaluates the ex +Index: Python-3.10.19/Doc/reference/simple_stmts.rst +=================================================================== +--- Python-3.10.19.orig/Doc/reference/simple_stmts.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/reference/simple_stmts.rst 2025-12-19 23:10:15.409656983 +0100 +@@ -53,8 +53,8 @@ expression). .. index:: @@ -2679,7 +2809,7 @@ pair: string; conversion single: output pair: standard; output -@@ -76,7 +76,7 @@ Assignment statements +@@ -76,7 +76,7 @@ pair: assignment; statement pair: binding; name pair: rebinding; name @@ -2688,7 +2818,7 @@ pair: attribute; assignment Assignment statements are used to (re)bind names to values and to modify -@@ -185,7 +185,7 @@ Assignment of an object to a single targ +@@ -185,7 +185,7 @@ .. index:: pair: subscription; assignment @@ -2697,7 +2827,7 @@ * If the target is a subscription: The primary expression in the reference is evaluated. It should yield either a mutable sequence object (such as a list) -@@ -193,8 +193,8 @@ Assignment of an object to a single targ +@@ -193,8 +193,8 @@ evaluated. .. index:: @@ -2708,7 +2838,7 @@ If the primary is a mutable sequence object (such as a list), the subscript must yield an integer. If it is negative, the sequence's length is added to -@@ -204,8 +204,8 @@ Assignment of an object to a single targ +@@ -204,8 +204,8 @@ raised (assignment to a subscripted sequence cannot add new items to a list). .. index:: @@ -2719,7 +2849,7 @@ If the primary is a mapping object (such as a dictionary), the subscript must have a type compatible with the mapping's key type, and the mapping is then -@@ -376,7 +376,7 @@ The :keyword:`!assert` statement +@@ -376,7 +376,7 @@ ================================ .. index:: @@ -2728,7 +2858,7 @@ pair: debugging; assertions single: , (comma); expression list -@@ -398,7 +398,7 @@ The extended form, ``assert expression1, +@@ -398,7 +398,7 @@ .. index:: single: __debug__ @@ -2737,7 +2867,7 @@ These equivalences assume that :const:`__debug__` and :exc:`AssertionError` refer to the built-in variables with those names. In the current implementation, the -@@ -419,7 +419,7 @@ The :keyword:`!pass` statement +@@ -419,7 +419,7 @@ ============================== .. index:: @@ -2746,7 +2876,7 @@ pair: null; operation pair: null; operation -@@ -441,7 +441,7 @@ The :keyword:`!del` statement +@@ -441,7 +441,7 @@ ============================= .. index:: @@ -2755,7 +2885,7 @@ pair: deletion; target triple: deletion; target; list -@@ -454,7 +454,7 @@ Rather than spelling it out in full deta +@@ -454,7 +454,7 @@ Deletion of a target list recursively deletes each target, from left to right. .. index:: @@ -2764,7 +2894,7 @@ pair: unbinding; name Deletion of a name removes the binding of that name from the local or global -@@ -480,7 +480,7 @@ The :keyword:`!return` statement +@@ -480,7 +480,7 @@ ================================ .. index:: @@ -2773,7 +2903,7 @@ pair: function; definition pair: class; definition -@@ -495,7 +495,7 @@ If an expression list is present, it is +@@ -495,7 +495,7 @@ :keyword:`return` leaves the current function call with the expression list (or ``None``) as return value. @@ -2782,7 +2912,7 @@ When :keyword:`return` passes control out of a :keyword:`try` statement with a :keyword:`finally` clause, that :keyword:`!finally` clause is executed before -@@ -517,11 +517,11 @@ The :keyword:`!yield` statement +@@ -517,11 +517,11 @@ =============================== .. index:: @@ -2796,7 +2926,7 @@ .. productionlist:: python-grammar yield_stmt: `yield_expression` -@@ -553,7 +553,7 @@ The :keyword:`!raise` statement +@@ -553,7 +553,7 @@ =============================== .. index:: @@ -2805,7 +2935,7 @@ single: exception pair: raising; exception single: __traceback__ (exception attribute) -@@ -574,7 +574,7 @@ instantiating the class with no argument +@@ -574,7 +574,7 @@ The :dfn:`type` of the exception is the exception instance's class, the :dfn:`value` is the instance itself. @@ -2814,7 +2944,7 @@ A traceback object is normally created automatically when an exception is raised and attached to it as the :attr:`__traceback__` attribute, which is writable. -@@ -661,9 +661,9 @@ The :keyword:`!break` statement +@@ -661,9 +661,9 @@ =============================== .. index:: @@ -2827,7 +2957,7 @@ pair: loop; statement .. productionlist:: python-grammar -@@ -673,7 +673,7 @@ The :keyword:`!break` statement +@@ -673,7 +673,7 @@ :keyword:`while` loop, but not nested in a function or class definition within that loop. @@ -2836,7 +2966,7 @@ pair: loop control; target It terminates the nearest enclosing loop, skipping the optional :keyword:`!else` -@@ -682,7 +682,7 @@ clause if the loop has one. +@@ -682,7 +682,7 @@ If a :keyword:`for` loop is terminated by :keyword:`break`, the loop control target keeps its current value. @@ -2845,7 +2975,7 @@ When :keyword:`break` passes control out of a :keyword:`try` statement with a :keyword:`finally` clause, that :keyword:`!finally` clause is executed before -@@ -695,11 +695,11 @@ The :keyword:`!continue` statement +@@ -695,11 +695,11 @@ ================================== .. index:: @@ -2861,7 +2991,7 @@ .. productionlist:: python-grammar continue_stmt: "continue" -@@ -720,12 +720,12 @@ The :keyword:`!import` statement +@@ -720,12 +720,12 @@ ================================ .. index:: @@ -2878,7 +3008,7 @@ single: , (comma); import statement .. productionlist:: python-grammar -@@ -936,7 +936,7 @@ The :keyword:`!global` statement +@@ -936,7 +936,7 @@ ================================ .. index:: @@ -2887,7 +3017,7 @@ triple: global; name; binding single: , (comma); identifier list -@@ -964,9 +964,9 @@ annotation. +@@ -964,9 +964,9 @@ them or silently change the meaning of the program. .. index:: @@ -2900,7 +3030,7 @@ **Programmer's note:** :keyword:`global` is a directive to the parser. It applies only to code parsed at the same time as the :keyword:`!global` statement. -@@ -982,7 +982,7 @@ call. The same applies to the :func:`ev +@@ -982,7 +982,7 @@ The :keyword:`!nonlocal` statement ================================== @@ -2909,9 +3039,11 @@ single: , (comma); identifier list .. productionlist:: python-grammar ---- a/Doc/reference/toplevel_components.rst -+++ b/Doc/reference/toplevel_components.rst -@@ -21,9 +21,9 @@ Complete Python programs +Index: Python-3.10.19/Doc/reference/toplevel_components.rst +=================================================================== +--- Python-3.10.19.orig/Doc/reference/toplevel_components.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/reference/toplevel_components.rst 2025-12-19 23:10:15.409991385 +0100 +@@ -21,9 +21,9 @@ .. index:: single: program .. index:: @@ -2924,7 +3056,7 @@ While a language specification need not prescribe how the language interpreter is invoked, it is useful to have a notion of a complete Python program. A -@@ -38,7 +38,7 @@ the next section. +@@ -38,7 +38,7 @@ .. index:: single: interactive mode @@ -2933,7 +3065,7 @@ The interpreter may also be invoked in interactive mode; in this case, it does not read and execute a complete program but reads and executes one statement -@@ -98,7 +98,7 @@ Expression input +@@ -98,7 +98,7 @@ ================ .. index:: single: input @@ -2942,9 +3074,11 @@ :func:`eval` is used for expression input. It ignores leading whitespace. The string argument to :func:`eval` must have the following form: ---- a/Doc/tools/extensions/pyspecific.py -+++ b/Doc/tools/extensions/pyspecific.py -@@ -644,6 +644,30 @@ def process_audit_events(app, doctree, f +Index: Python-3.10.19/Doc/tools/extensions/pyspecific.py +=================================================================== +--- Python-3.10.19.orig/Doc/tools/extensions/pyspecific.py 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/tools/extensions/pyspecific.py 2025-12-19 23:10:15.410328302 +0100 +@@ -644,6 +644,30 @@ node.replace_self(table) @@ -2975,7 +3109,7 @@ def setup(app): app.add_role('issue', issue_role) app.add_role('gh', gh_issue_role) -@@ -670,6 +694,7 @@ def setup(app): +@@ -670,6 +694,7 @@ app.add_directive_to_domain('py', 'awaitablemethod', PyAwaitableMethod) app.add_directive_to_domain('py', 'abstractmethod', PyAbstractMethod) app.add_directive('miscnews', MiscNews) @@ -2983,9 +3117,11 @@ app.connect('doctree-resolved', process_audit_events) app.connect('env-merge-info', audit_events_merge) app.connect('env-purge-doc', audit_events_purge) ---- a/Doc/tutorial/classes.rst -+++ b/Doc/tutorial/classes.rst -@@ -344,7 +344,7 @@ list objects have methods called append, +Index: Python-3.10.19/Doc/tutorial/classes.rst +=================================================================== +--- Python-3.10.19.orig/Doc/tutorial/classes.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/tutorial/classes.rst 2025-12-19 23:10:15.410720534 +0100 +@@ -344,7 +344,7 @@ However, in the following discussion, we'll use the term method exclusively to mean methods of class instance objects, unless explicitly stated otherwise.) @@ -2994,9 +3130,11 @@ Valid method names of an instance object depend on its class. By definition, all attributes of a class that are function objects define corresponding ---- a/Doc/tutorial/controlflow.rst -+++ b/Doc/tutorial/controlflow.rst -@@ -46,7 +46,7 @@ details see :ref:`tut-match`. +Index: Python-3.10.19/Doc/tutorial/controlflow.rst +=================================================================== +--- Python-3.10.19.orig/Doc/tutorial/controlflow.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/tutorial/controlflow.rst 2025-12-19 23:10:15.411043971 +0100 +@@ -46,7 +46,7 @@ ========================== .. index:: @@ -3005,9 +3143,11 @@ The :keyword:`for` statement in Python differs a bit from what you may be used to in C or Pascal. Rather than always iterating over an arithmetic progression ---- a/Doc/tutorial/inputoutput.rst -+++ b/Doc/tutorial/inputoutput.rst -@@ -285,8 +285,8 @@ Reading and Writing Files +Index: Python-3.10.19/Doc/tutorial/inputoutput.rst +=================================================================== +--- Python-3.10.19.orig/Doc/tutorial/inputoutput.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/tutorial/inputoutput.rst 2025-12-19 23:10:15.411308183 +0100 +@@ -285,8 +285,8 @@ ========================= .. index:: @@ -3018,7 +3158,7 @@ :func:`open` returns a :term:`file object`, and is most commonly used with two positional arguments and one keyword argument: -@@ -466,7 +466,7 @@ Reference for a complete guide to file o +@@ -466,7 +466,7 @@ Saving structured data with :mod:`json` --------------------------------------- @@ -3027,9 +3167,11 @@ Strings can easily be written to and read from a file. Numbers take a bit more effort, since the :meth:`read` method only returns strings, which will have to ---- a/Doc/tutorial/modules.rst -+++ b/Doc/tutorial/modules.rst -@@ -260,7 +260,7 @@ Some tips for experts: +Index: Python-3.10.19/Doc/tutorial/modules.rst +=================================================================== +--- Python-3.10.19.orig/Doc/tutorial/modules.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/tutorial/modules.rst 2025-12-19 23:10:15.411539499 +0100 +@@ -260,7 +260,7 @@ Standard Modules ================ @@ -3038,7 +3180,7 @@ Python comes with a library of standard modules, described in a separate document, the Python Library Reference ("Library Reference" hereafter). Some -@@ -341,7 +341,7 @@ Without arguments, :func:`dir` lists the +@@ -341,7 +341,7 @@ Note that it lists all types of names: variables, modules, functions, etc. @@ -3047,9 +3189,11 @@ :func:`dir` does not list the names of built-in functions and variables. If you want a list of those, they are defined in the standard module ---- a/Doc/tutorial/stdlib.rst -+++ b/Doc/tutorial/stdlib.rst -@@ -24,7 +24,7 @@ Be sure to use the ``import os`` style i +Index: Python-3.10.19/Doc/tutorial/stdlib.rst +=================================================================== +--- Python-3.10.19.orig/Doc/tutorial/stdlib.rst 2025-10-09 17:25:03.000000000 +0200 ++++ Python-3.10.19/Doc/tutorial/stdlib.rst 2025-12-19 23:10:15.411769907 +0100 +@@ -24,7 +24,7 @@ will keep :func:`os.open` from shadowing the built-in :func:`open` function which operates much differently.