Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python312 for openSUSE:Factory checked in at 2024-12-13 22:33:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python312 (Old) and /work/SRC/openSUSE:Factory/.python312.new.29675 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python312" Fri Dec 13 22:33:05 2024 rev:26 rq:1228975 version:3.12.8 Changes: -------- --- /work/SRC/openSUSE:Factory/python312/python312.changes 2024-11-30 13:27:30.396857665 +0100 +++ /work/SRC/openSUSE:Factory/.python312.new.29675/python312.changes 2024-12-13 22:33:28.693912105 +0100 @@ -1,0 +2,345 @@ +Fri Dec 6 20:39:56 UTC 2024 - Matej Cepl <mc...@cepl.eu> + +- Add CVE-2024-12254-unbound-mem-buffering-SelectorSocketTransport.writelines.patch + preventing exhaustion of memory (gh#python/cpython#127655, + bsc#1234290, CVE-2024-12254). + +------------------------------------------------------------------- +Wed Dec 4 21:47:08 UTC 2024 - Matej Cepl <mc...@cepl.eu> + +- Update to 3.12.8: + - Tools/Demos + - gh-126807: Fix extraction warnings in pygettext.py caused + by mistaking function definitions for function calls. + - Tests + - gh-126909: Fix test_os extended attribute tests to work on + filesystems with 1 KiB xattr size limit. + - gh-125041: Re-enable skipped tests for zlib on the + s390x architecture: only skip checks of the compressed + bytes, which can be different between zlibâs software + implementation and the hardware-accelerated implementation. + - gh-124295: Add translation tests to the argparse module. + - Security + - gh-126623: Upgrade libexpat to 2.6.4 + - Library + - gh-127303: Publicly expose EXACT_TOKEN_TYPES in + token.__all__. + - gh-123967: Fix faulthandler for trampoline frames. If the + top-most frame is a trampoline frame, skip it. Patch by + Victor Stinner. + - gh-127182: Fix io.StringIO.__setstate__() crash, when None + was passed as the first value. + - gh-127217: Fix urllib.request.pathname2url() for paths + starting with multiple slashes on Posix. + - gh-127035: Fix shutil.which on Windows. Now it looks at + direct match if and only if the command ends with a PATHEXT + extension or X_OK is not in mode. Support extensionless + files if â.â is in PATHEXT. Support PATHEXT extensions that + end with a dot. + - gh-127078: Fix issue where urllib.request.url2pathname() + failed to discard an extra slash before a UNC drive in the + URL path on Windows. + - gh-126766: Fix issue where urllib.request.url2pathname() + failed to discard any âlocalhostâ authority present in the + URL. + - gh-126997: Fix support of STRING and GLOBAL opcodes with + non-ASCII arguments in pickletools. pickletools.dis() + now outputs non-ASCII bytes in STRING, BINSTRING and + SHORT_BINSTRING arguments as escaped (\xXX). + - gh-126618: Fix the representation of itertools.count + objects when the count value is sys.maxsize. + - gh-85168: Fix issue where urllib.request.url2pathname() and + pathname2url() always used UTF-8 when quoting and unquoting + file URIs. They now use the filesystem encoding and error + handler. + - gh-67877: Fix memory leaks when regular expression matching + terminates abruptly, either because of a signal or because + memory allocation fails. + - gh-126789: Fixed the values of sysconfig.get_config_vars(), + sysconfig.get_paths(), and their siblings when the site + initialization happens after sysconfig has built a cache + for sysconfig.get_config_vars(). + - gh-126188: Update bundled pip to 24.3.1 + - gh-126766: Fix issue where urllib.request.url2pathname() + failed to discard two leading slashes introducing an empty + authority section. + - gh-126727: locale.nl_langinfo(locale.ERA) now returns + multiple era description segments separated by + semicolons. Previously it only returned the first segment + on platforms with Glibc. + - gh-126699: Allow collections.abc.AsyncIterator to be a base + for Protocols. + - gh-104745: Limit starting a patcher (from + unittest.mock.patch() or unittest.mock.patch.object()) more + than once without stopping it + - gh-126595: Fix a crash when instantiating itertools.count + with an initial count of sys.maxsize on debug builds. Patch + by Bénédikt Tran. + - gh-120423: Fix issue where urllib.request.pathname2url() + mishandled Windows paths with embedded forward slashes. + - gh-126565: Improve performances of zipfile.Path.open() for + non-reading modes. + - gh-126505: Fix bugs in compiling case-insensitive regular + expressions with character classes containing non-BMP + characters: upper-case non-BMP character did was ignored + and the ASCII flag was ignored when matching a character + range whose upper bound is beyond the BMP region. + - gh-117378: Fixed the multiprocessing "forkserver" + start method forkserver process to correctly inherit + the parentâs sys.path during the importing of + multiprocessing.set_forkserver_preload() modules in the + same manner as sys.path is configured in workers before + executing work items. + This bug caused some forkserver module preloading to silently + fail to preload. This manifested as a performance degration + in child processes when the sys.path was required due to + additional repeated work in every worker. + It could also have a side effect of "" remaining in + sys.path during forkserver preload imports instead of the + absolute path from os.getcwd() at multiprocessing import time + used in the worker sys.path. + The sys.path differences between phases in the child + process could potentially have caused preload to import incorrect + things from the wrong location. We are unaware of that actually + having happened in practice. + - gh-125679: The multiprocessing.Lock and + multiprocessing.RLock repr values no longer say âunknownâ + on macOS. + - gh-126476: Raise calendar.IllegalMonthError (now a subclass + of IndexError) for calendar.month() when the input month is + not correct. + - gh-126489: The Python implementation of pickle no longer + calls pickle.Pickler.persistent_id() for the result of + persistent_id(). + - gh-126303: Fix pickling and copying of os.sched_param + objects. + - gh-126138: Fix a use-after-free crash on asyncio.Task + objects whose underlying coroutine yields an object that + implements an evil __getattribute__(). Patch by Nico + Posada. + - gh-126220: Fix crash in cProfile.Profile and + _lsprof.Profiler when their callbacks were directly called + with 0 arguments. + - gh-126212: Fix issue where urllib.request.pathname2url() + and url2pathname() removed slashes from Windows DOS drive + paths and URLs. + - gh-126205: Fix issue where urllib.request.pathname2url() + generated URLs beginning with four slashes (rather than + two) when given a Windows UNC path. + - gh-126105: Fix a crash in ast when the ast.AST._fields + attribute is deleted. + - gh-126106: Fixes a possible NULL pointer dereference in + ssl. + - gh-126080: Fix a use-after-free crash on asyncio.Task + objects for which the underlying event loop implements an + evil __getattribute__(). Reported by Nico-Posada. Patch by + Bénédikt Tran. + - gh-126083: Fixed a reference leak in asyncio.Task objects + when reinitializing the same object with a non-None + context. Patch by Nico Posada. + - gh-125984: Fix use-after-free crashes on asyncio.Future + objects for which the underlying event loop implements an + evil __getattribute__(). Reported by Nico-Posada. Patch by + Bénédikt Tran. + - gh-125969: Fix an out-of-bounds crash when an evil + asyncio.loop.call_soon() mutates the length of the internal + callbacks list. Patch by Bénédikt Tran. + - gh-125966: Fix a use-after-free crash in + asyncio.Future.remove_done_callback(). Patch by Bénédikt + Tran. + - gh-125789: Fix possible crash when mutating list of + callbacks returned by asyncio.Future._callbacks. It + now always returns a new copy in C implementation + _asyncio. Patch by Kumar Aditya. + - gh-124452: Fix an issue in + email.policy.EmailPolicy.header_source_parse() and + email.policy.Compat32.header_source_parse() that introduced + spurious leading whitespaces into header values when the + header includes a newline character after the header name + delimiter (:) and before the value. + - gh-125884: Fixed the bug for pdb where it canât set + breakpoints on functions with certain annotations. + - gh-125355: Fix several bugs in + argparse.ArgumentParser.parse_intermixed_args(). + The parser no longer changes temporarily during parsing. + Default values are not processed twice. + Required mutually exclusive groups containing positional + arguments are now supported. + The missing arguments report now includes the names of + all required optional and positional arguments. + Unknown options can be intermixed with positional + arguments in parse_known_intermixed_args(). + - gh-125682: Reject non-ASCII digits in the Python + implementation of json.loads() conforming to the JSON + specification. + - gh-125660: Reject invalid unicode escapes for Python + implementation of json.loads(). + - gh-125259: Fix the notes removal logic for errors thrown in + enum initialization. + - gh-125519: Improve traceback if importlib.reload() is + called with an object that is not a module. Patch by Alex + Waygood. + - gh-125451: Fix deadlock when + concurrent.futures.ProcessPoolExecutor shuts down + concurrently with an error when feeding a job to a worker + process. + - gh-125422: Fixed the bug where pdb and bdb can step into + the bottom caller frame. + - gh-100141: Fixed the bug where pdb will be stuck in an + infinite loop when debugging an empty file. + - gh-53203: Fix time.strptime() for %c, %x and %X formats + in many locales that use non-ASCII digits, like Persian, + Burmese, Odia and Shan. + - gh-125254: Fix a bug where ArgumentError includes the + incorrect ambiguous option in argparse. + - gh-61011: Fix inheritance of nested mutually + exclusive groups from parent parser in + argparse.ArgumentParser. Previously, all nested mutually + exclusive groups lost their connection to the group + containing them and were displayed as belonging directly to + the parser. + - gh-52551: Fix encoding issues in time.strftime(), the + strftime() method of the datetime classes datetime, date + and time and formatting of these classes. Characters + not encodable in the current locale are now acceptable + in the format string. Surrogate pairs and sequence + of surrogatescape-encoded bytes are no longer + recombinated. Embedded null character no longer terminates + the format string. + - gh-125118: Donât copy arbitrary values to _Bool in the + struct module. + - gh-125069: Fix an issue where providing a pathlib.PurePath + object as an initializer argument to a second PurePath + object with a different flavour resulted in arguments to + the former objectâs initializer being joined by the latter + objectâs flavour. + - gh-124969: Fix locale.nl_langinfo(locale.ALT_DIGITS) on + platforms with glibc. Now it returns a string consisting of + up to 100 semicolon-separated symbols (an empty string in + most locales) on all Posix platforms. Previously it only + returned the first symbol or an empty string. + - gh-124958: Fix refcycles in exceptions raised from + asyncio.TaskGroup and the python implementation of + asyncio.Future + - gh-53203: Fix time.strptime() for %c and %x formats in many + locales: Arabic, Bislama, Breton, Bodo, Kashubian, Chuvash, + Estonian, French, Irish, Geâez, Gurajati, Manx Gaelic, + Hebrew, Hindi, Chhattisgarhi, Haitian Kreyol, Japanese, + Kannada, Korean, Marathi, Malay, Norwegian, Nynorsk, + Punjabi, Rajasthani, Tok Pisin, Yoruba, Yue Chinese, + Yau/Nungon and Chinese. + - gh-124917: Allow calling os.path.exists() and + os.path.lexists() with keyword arguments on Windows. Fixes + a regression in 3.12.4. + - gh-124653: Fix detection of the minimal Queue API needed by + the logging module. Patch by Bénédikt Tran. + - gh-124858: Fix reference cycles left in tracebacks + in asyncio.open_connection() when used with + happy_eyeballs_delay + - gh-124390: Fixed AssertionError when using + asyncio.staggered.staggered_race() with + asyncio.eager_task_factory. + - gh-124651: Properly quote template strings in venv + activation scripts. + - gh-124594: All asyncio REPL prompts run in the same + context. Contributed by Bartosz SÅawecki. + - gh-120378: Fix a crash related to an integer overflow in + curses.resizeterm() and curses.resize_term(). + - gh-123884: Fixed bug in itertools.tee() handling of other + tee inputs (a tee in a tee). The output now has the + promised n independent new iterators. Formerly, the first + iterator was identical (not independent) to the input + iterator. This would sometimes give surprising results. + - gh-123978: Remove broken time.thread_time() and + time.thread_time_ns() on NetBSD. + - gh-124008: Fix possible crash (in debug build), incorrect + output or returning incorrect value from raw binary write() + when writing to console on Windows. + - gh-123370: Fix the canvas not clearing after running + turtledemo clock. + - gh-120754: Update unbounded read calls in zipfile to + specify an explicit size putting a limit on how much data + they may read. This also updates handling around ZIP max + comment size to match the standard instead of reading + comments that are one byte too long. + - gh-70764: Fixed an issue where inspect.getclosurevars() + would incorrectly classify an attribute name as a global + variable when the name exists both as an attribute name and + a global variable. + - gh-119826: Always return an absolute path for + os.path.abspath() on Windows. + - gh-117766: Always use str() to print choices in argparse. + - gh-101955: Fix SystemError when match regular expression + pattern containing some combination of possessive + quantifier, alternative and capture group. + - gh-88110: Fixed multiprocessing.Process reporting a + .exitcode of 1 even on success when using the "fork" start + method while using a concurrent.futures.ThreadPoolExecutor. + - gh-71936: Fix a race condition in + multiprocessing.pool.Pool. + - bpo-46128: Strip unittest.IsolatedAsyncioTestCase stack + frames from reported stacktraces. + - bpo-14074: Fix argparse metavar processing to allow + positional arguments to have a tuple metavar. + - IDLE + - gh-122392: Increase currently inadequate vertical spacing + for the IDLE browsers (path, module, and stack) on + high-resolution monitors. + - Documentation + - gh-125277: Require Sphinx 7.2.6 or later to build the + Python documentation. Patch by Adam Turner. + - gh-125018: The importlib.metadata documentation now + includes semantic cross-reference targets for the + significant documented APIs. This means intersphinx + references like importlib.metadata.version() will now work + as expected. + - gh-121277: Writers of CPythonâs documentation can now use + next as the version for the versionchanged, versionadded, ++++ 48 more lines (skipped) ++++ between /work/SRC/openSUSE:Factory/python312/python312.changes ++++ and /work/SRC/openSUSE:Factory/.python312.new.29675/python312.changes Old: ---- CVE-2024-9287-venv_path_unquoted.patch Python-3.12.7.tar.xz Python-3.12.7.tar.xz.asc New: ---- CVE-2024-12254-unbound-mem-buffering-SelectorSocketTransport.writelines.patch Python-3.12.8.tar.xz Python-3.12.8.tar.xz.asc BETA DEBUG BEGIN: Old:- Remove upstreamed patches: - CVE-2024-9287-venv_path_unquoted.patch BETA DEBUG END: BETA DEBUG BEGIN: New: - Add CVE-2024-12254-unbound-mem-buffering-SelectorSocketTransport.writelines.patch preventing exhaustion of memory (gh#python/cpython#127655, BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python312.spec ++++++ --- /var/tmp/diff_new_pack.RnCtkt/_old 2024-12-13 22:33:29.637951477 +0100 +++ /var/tmp/diff_new_pack.RnCtkt/_new 2024-12-13 22:33:29.641951644 +0100 @@ -110,7 +110,7 @@ # _md5.cpython-38m-x86_64-linux-gnu.so %define dynlib() %{sitedir}/lib-dynload/%{1}.cpython-%{abi_tag}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}.so Name: %{python_pkg_name}%{psuffix} -Version: 3.12.7 +Version: 3.12.8 Release: 0 Summary: Python 3 Interpreter License: Python-2.0 @@ -182,9 +182,9 @@ # PATCH-FIX-SLE doc-py38-to-py36.patch mc...@suse.com # Make documentation extensions working with Python 3.6 Patch44: doc-py38-to-py36.patch -# PATCH-FIX-UPSTREAM CVE-2024-9287-venv_path_unquoted.patch gh#python/cpython#124651 mc...@suse.com -# venv should properly quote path names provided when creating a venv -Patch45: CVE-2024-9287-venv_path_unquoted.patch +# PATCH-FIX-UPSTREAM CVE-2024-12254-unbound-mem-buffering-SelectorSocketTransport.writelines.patch bsc#1234290 mc...@suse.com +# prevents exhaustion of memory +Patch45: CVE-2024-12254-unbound-mem-buffering-SelectorSocketTransport.writelines.patch BuildRequires: autoconf-archive BuildRequires: automake BuildRequires: fdupes @@ -441,8 +441,7 @@ other applications. %prep -%setup -q -n %{tarname} -%autopatch -p1 +%autosetup -p1 -n %{tarname} # Fix devhelp doc build gh#python/cpython#120150 echo "master_doc = 'contents'" >> Doc/conf.py ++++++ CVE-2024-12254-unbound-mem-buffering-SelectorSocketTransport.writelines.patch ++++++ >From bfc2e93d755bf496e5ef4cae9609d2823122c909 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" <n...@koston.org> Date: Thu, 5 Dec 2024 10:01:10 -0600 Subject: [PATCH 01/10] Ensure writelines pauses the protocol if needed --- Lib/asyncio/selector_events.py | 1 Lib/test/test_asyncio/test_selector_events.py | 12 ++++++++++ Misc/NEWS.d/next/Security/2024-12-05-21-35-19.gh-issue-127655.xpPoOf.rst | 1 3 files changed, 14 insertions(+) --- a/Lib/asyncio/selector_events.py +++ b/Lib/asyncio/selector_events.py @@ -1183,6 +1183,7 @@ class _SelectorSocketTransport(_Selector # If the entire buffer couldn't be written, register a write handler if self._buffer: self._loop._add_writer(self._sock_fd, self._write_ready) + self._maybe_pause_protocol() def can_write_eof(self): return True --- a/Lib/test/test_asyncio/test_selector_events.py +++ b/Lib/test/test_asyncio/test_selector_events.py @@ -805,6 +805,18 @@ class SelectorSocketTransportTests(test_ self.assertTrue(self.sock.send.called) self.assertTrue(self.loop.writers) + def test_writelines_pauses_protocol(self): + data = memoryview(b'data') + self.sock.send.return_value = 2 + self.sock.send.fileno.return_value = 7 + + transport = self.socket_transport() + transport._high_water = 1 + transport.writelines([data]) + self.assertTrue(self.protocol.pause_writing.called) + self.assertTrue(self.sock.send.called) + self.assertTrue(self.loop.writers) + @unittest.skipUnless(selector_events._HAS_SENDMSG, 'no sendmsg') def test_write_sendmsg_full(self): data = memoryview(b'data') --- /dev/null +++ b/Misc/NEWS.d/next/Security/2024-12-05-21-35-19.gh-issue-127655.xpPoOf.rst @@ -0,0 +1 @@ +Fixed the :class:`!asyncio.selector_events._SelectorSocketTransport` transport not pausing writes for the protocol when the buffer reaches the high water mark when using :meth:`asyncio.WriteTransport.writelines`. ++++++ F00251-change-user-install-location.patch ++++++ --- /var/tmp/diff_new_pack.RnCtkt/_old 2024-12-13 22:33:29.677953145 +0100 +++ /var/tmp/diff_new_pack.RnCtkt/_new 2024-12-13 22:33:29.681953312 +0100 @@ -24,15 +24,12 @@ Co-authored-by: Michal Cyprian <m.cypr...@gmail.com> Co-authored-by: LumÃr Balhar <frenzy.madn...@gmail.com> --- - Lib/site.py | 9 ++++++- - Lib/sysconfig.py | 49 +++++++++++++++++++++++++++++++++++++- - Lib/test/test_sysconfig.py | 17 +++++++++++-- - 3 files changed, 71 insertions(+), 4 deletions(-) + Lib/sysconfig.py | 51 ++++++++++++++++++++++++++++++++++++++++++++- + Lib/test/test_sysconfig.py | 17 +++++++++++++-- + 2 files changed, 65 insertions(+), 3 deletions(-) -Index: Python-3.12.4/Lib/sysconfig.py -=================================================================== ---- Python-3.12.4.orig/Lib/sysconfig.py -+++ Python-3.12.4/Lib/sysconfig.py +--- a/Lib/sysconfig.py ++++ b/Lib/sysconfig.py @@ -104,6 +104,11 @@ if os.name == 'nt': else: _INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv'] @@ -45,7 +42,7 @@ # NOTE: site.py has copy of this function. # Sync it when modify this function. -@@ -163,6 +168,19 @@ if _HAS_USER_BASE: +@@ -163,13 +168,28 @@ if _HAS_USER_BASE: }, } @@ -65,7 +62,16 @@ _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', 'scripts', 'data') -@@ -263,11 +281,40 @@ def _extend_dict(target_dict, other_dict + _PY_VERSION = sys.version.split()[0] + _PY_VERSION_SHORT = f'{sys.version_info[0]}.{sys.version_info[1]}' + _PY_VERSION_SHORT_NO_DOT = f'{sys.version_info[0]}{sys.version_info[1]}' ++_PREFIX = os.path.normpath(sys.prefix) + _BASE_PREFIX = os.path.normpath(sys.base_prefix) ++_EXEC_PREFIX = os.path.normpath(sys.exec_prefix) + _BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix) + # Mutex guarding initialization of _CONFIG_VARS. + _CONFIG_VARS_LOCK = threading.RLock() +@@ -261,11 +281,40 @@ def _extend_dict(target_dict, other_dict target_dict[key] = value @@ -107,11 +113,9 @@ if os.name == 'nt': # On Windows we want to substitute 'lib' for schemes rather # than the native value (without modifying vars, in case it -Index: Python-3.12.4/Lib/test/test_sysconfig.py -=================================================================== ---- Python-3.12.4.orig/Lib/test/test_sysconfig.py -+++ Python-3.12.4/Lib/test/test_sysconfig.py -@@ -110,8 +110,19 @@ class TestSysConfig(unittest.TestCase): +--- a/Lib/test/test_sysconfig.py ++++ b/Lib/test/test_sysconfig.py +@@ -119,8 +119,19 @@ class TestSysConfig(unittest.TestCase): for scheme in _INSTALL_SCHEMES: for name in _INSTALL_SCHEMES[scheme]: expected = _INSTALL_SCHEMES[scheme][name].format(**config_vars) @@ -132,7 +136,7 @@ os.path.normpath(expected), ) -@@ -344,7 +355,7 @@ class TestSysConfig(unittest.TestCase): +@@ -353,7 +364,7 @@ class TestSysConfig(unittest.TestCase): self.assertTrue(os.path.isfile(config_h), config_h) def test_get_scheme_names(self): @@ -141,7 +145,7 @@ if HAS_USER_BASE: wanted.extend(['nt_user', 'osx_framework_user', 'posix_user']) self.assertEqual(get_scheme_names(), tuple(sorted(wanted))) -@@ -356,6 +367,8 @@ class TestSysConfig(unittest.TestCase): +@@ -365,6 +376,8 @@ class TestSysConfig(unittest.TestCase): cmd = "-c", "import sysconfig; print(sysconfig.get_platform())" self.assertEqual(py.call_real(*cmd), py.call_link(*cmd)) ++++++ Python-3.12.7.tar.xz -> Python-3.12.8.tar.xz ++++++ /work/SRC/openSUSE:Factory/python312/Python-3.12.7.tar.xz /work/SRC/openSUSE:Factory/.python312.new.29675/Python-3.12.8.tar.xz differ: char 27, line 1 ++++++ doc-py38-to-py36.patch ++++++ --- /var/tmp/diff_new_pack.RnCtkt/_old 2024-12-13 22:33:29.769956982 +0100 +++ /var/tmp/diff_new_pack.RnCtkt/_new 2024-12-13 22:33:29.773957149 +0100 @@ -1,24 +1,25 @@ --- - Doc/conf.py | 4 +- + Doc/conf.py | 8 ++-- Doc/tools/check-warnings.py | 3 + Doc/tools/extensions/audit_events.py | 54 ++++++++++++++++---------------- + Doc/tools/extensions/availability.py | 15 ++++---- Doc/tools/extensions/c_annotations.py | 37 ++++++++++----------- Doc/tools/extensions/glossary_search.py | 10 +---- Doc/tools/extensions/patchlevel.py | 9 ++--- - 6 files changed, 58 insertions(+), 59 deletions(-) + 7 files changed, 67 insertions(+), 69 deletions(-) --- a/Doc/conf.py +++ b/Doc/conf.py -@@ -76,7 +76,7 @@ today_fmt = '%B %d, %Y' +@@ -85,7 +85,7 @@ today_fmt = '%B %d, %Y' highlight_language = 'python3' # Minimum version of sphinx required --needs_sphinx = '6.2.1' +-needs_sphinx = '7.2.6' +needs_sphinx = '4.2.0' # Create table of contents entries for domain objects (e.g. functions, classes, # attributes, etc.). Default is True. -@@ -329,7 +329,7 @@ html_short_title = f'{release} Documenta +@@ -342,7 +342,7 @@ html_short_title = f'{release} Documenta # (See .readthedocs.yml and https://docs.readthedocs.io/en/stable/reference/environment-variables.html) is_deployment_preview = os.getenv("READTHEDOCS_VERSION_TYPE") == "external" repository_url = os.getenv("READTHEDOCS_GIT_CLONE_URL", "") @@ -27,6 +28,22 @@ html_context = { "is_deployment_preview": is_deployment_preview, "repository_url": repository_url or None, +@@ -598,13 +598,13 @@ extlinks_detect_hardcoded_links = True + + if sphinx.version_info[:2] < (8, 1): + # Sphinx 8.1 has in-built CVE and CWE roles. +- extlinks |= { ++ extlinks.update({ + "cve": ( + "https://www.cve.org/CVERecord?id=CVE-%s", + "CVE-%s", + ), + "cwe": ("https://cwe.mitre.org/data/definitions/%s.html", "CWE-%s"), +- } ++ }) + + # Options for c_annotations extension + # ----------------------------------- --- a/Doc/tools/check-warnings.py +++ b/Doc/tools/check-warnings.py @@ -228,7 +228,8 @@ def fail_if_regression( @@ -181,6 +198,61 @@ ) -> nodes.row: row = nodes.row() name_node = nodes.paragraph("", nodes.Text(name)) +--- a/Doc/tools/extensions/availability.py ++++ b/Doc/tools/extensions/availability.py +@@ -1,8 +1,6 @@ + """Support for documenting platform availability""" + +-from __future__ import annotations +- +-from typing import TYPE_CHECKING ++from typing import Dict, List, TYPE_CHECKING, Union + + from docutils import nodes + from sphinx import addnodes +@@ -52,7 +50,7 @@ class Availability(SphinxDirective): + optional_arguments = 0 + final_argument_whitespace = True + +- def run(self) -> list[nodes.container]: ++ def run(self) -> List[nodes.container]: + title = "Availability" + refnode = addnodes.pending_xref( + title, +@@ -76,7 +74,7 @@ class Availability(SphinxDirective): + + return [cnode] + +- def parse_platforms(self) -> dict[str, str | bool]: ++ def parse_platforms(self) -> Dict[str, Union[str, bool]]: + """Parse platform information from arguments + + Arguments is a comma-separated string of platforms. A platform may +@@ -95,12 +93,13 @@ class Availability(SphinxDirective): + platform, _, version = arg.partition(" >= ") + if platform.startswith("not "): + version = False +- platform = platform.removeprefix("not ") ++ platform = platform[len("not "):] + elif not version: + version = True + platforms[platform] = version + +- if unknown := set(platforms).difference(KNOWN_PLATFORMS): ++ unknown = set(platforms).difference(KNOWN_PLATFORMS) ++ if unknown: + logger.warning( + "Unknown platform%s or syntax '%s' in '.. availability:: %s', " + "see %s:KNOWN_PLATFORMS for a set of known platforms.", +@@ -113,7 +112,7 @@ class Availability(SphinxDirective): + return platforms + + +-def setup(app: Sphinx) -> ExtensionMetadata: ++def setup(app): + app.add_directive("availability", Availability) + + return { --- a/Doc/tools/extensions/c_annotations.py +++ b/Doc/tools/extensions/c_annotations.py @@ -9,12 +9,10 @@ Configuration: ++++++ docs-docutils_014-Sphinx_420.patch ++++++ --- /var/tmp/diff_new_pack.RnCtkt/_old 2024-12-13 22:33:29.785957649 +0100 +++ /var/tmp/diff_new_pack.RnCtkt/_new 2024-12-13 22:33:29.789957816 +0100 @@ -42,8 +42,8 @@ --- a/Doc/tools/extensions/pyspecific.py +++ b/Doc/tools/extensions/pyspecific.py -@@ -27,7 +27,10 @@ from sphinx.locale import _ as sphinx_ge - from sphinx.util import logging +@@ -26,7 +26,10 @@ from sphinx.domains.python import PyFunc + from sphinx.locale import _ as sphinx_gettext from sphinx.util.docutils import SphinxDirective from sphinx.writers.text import TextWriter, TextTranslator -from sphinx.util.display import status_iterator ++++++ fix_configure_rst.patch ++++++ --- /var/tmp/diff_new_pack.RnCtkt/_old 2024-12-13 22:33:29.813958817 +0100 +++ /var/tmp/diff_new_pack.RnCtkt/_new 2024-12-13 22:33:29.817958984 +0100 @@ -21,7 +21,7 @@ Create a Python.framework rather than a traditional Unix install. Optional --- a/Misc/NEWS +++ b/Misc/NEWS -@@ -14138,7 +14138,7 @@ C API +@@ -14575,7 +14575,7 @@ C API - bpo-40939: Removed documentation for the removed ``PyParser_*`` C API. - bpo-43795: The list in :ref:`limited-api-list` now shows the public name ++++++ python-3.3.0b1-test-posix_fadvise.patch ++++++ --- /var/tmp/diff_new_pack.RnCtkt/_old 2024-12-13 22:33:29.901962487 +0100 +++ /var/tmp/diff_new_pack.RnCtkt/_new 2024-12-13 22:33:29.905962654 +0100 @@ -4,7 +4,7 @@ --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py -@@ -435,7 +435,7 @@ class PosixTester(unittest.TestCase): +@@ -437,7 +437,7 @@ class PosixTester(unittest.TestCase): def test_posix_fadvise(self): fd = os.open(os_helper.TESTFN, os.O_RDONLY) try: