Package Release Info

python313-nogil-3.13.14-160000.1.1

Update Info: Base Release
Available in Package Hub : 16.0

platforms

AArch64
ppc64le
s390x
x86-64

subpackages

python313-nogil
python313-nogil-curses
python313-nogil-dbm
python313-nogil-idle
python313-nogil-tk

Change Logs

* Wed Jun 17 2026 mcepl@cepl.eu
- Update to 3.13.14:
  - Security
  - gh-151159: Bumps the OpenSSL version to 3.0.21 on Android.
  - gh-150599: Fix a possible stack buffer overflow in bz2 when
    a bz2.BZ2Decompressor is reused after a decompression
    error. The decompressor now becomes unusable after libbz2
    reports an error.
  - gh-149835: shutil.move() now resolves symlinks via
    os.path.realpath() when checking whether the destination is
    inside the source directory, preventing a symlink-based
    bypass of that guard.
  - gh-149698: Update bundled libexpat to version 2.8.1 for the
    fix for CVE 2026-45186.
  - gh-87451: The ftplib module’s undocumented ftpcp function
    no longer trusts the IPv4 address value returned from the
    source server in response to the PASV command by default,
    completing the fix for CVE-2021-4189. As with ftplib.FTP,
    the former behavior can be re-enabled by setting the
    trust_server_pasv_ipv4_address attribute on the source
    ftplib.FTP instance to True. Thanks to Qi Deng at Aurascape
    AI for the report.
  - gh-149486: tarfile.data_filter() now validates link targets
    using the same normalised value that is written to disk,
    strips trailing separators from the member name when
    resolving a symlink’s directory, and rejects link members
    that would replace the destination directory itself. This
    closes several path-traversal bypasses of the data
    extraction filter.
  - gh-149079: Fix a potential denial of service in
    unicodedata.normalize(). The canonical ordering step of
    Unicode normalization used a quadratic-time insertion sort
    for reordering combining characters, which could be
    exploited with crafted input containing many combining
    characters in non-canonical order. Replaced with
    a linear-time counting sort for long runs.
  - gh-149018: Improved protection against XML hash-flooding
    attacks in xml.parsers.expat and xml.etree.ElementTree when
    Python is compiled with libExpat 2.8.0 or later.
  - gh-149017: Update bundled libexpat to version 2.8.0.
  - gh-90309: Base64-encode values when embedding cookies to
    JavaScript using the http.cookies.BaseCookie.js_output()
    method to avoid injection and escaping. (bsc#1262654,
    CVE-2026-6019)
  - gh-148808: Added buffer boundary check when using nbytes
    parameter with
    asyncio.AbstractEventLoop.sock_recvfrom_into(). Only
    relevant for Windows and the asyncio.ProactorEventLoop.
  - gh-148395: Fix a dangling input pointer in
    lzma.LZMADecompressor, bz2.BZ2Decompressor, and internal
    zlib._ZlibDecompressor when memory allocation fails with
    MemoryError, which could let a subsequent decompress() call
    read or write through a stale pointer to the
    already-released caller buffer. (bsc#1262098,
    CVE-2026-6100, seems like it has been incompletely applied
    gh#python/cpython#151605)
  - gh-148169: A bypass in webbrowser allowed URLs prefixed
    with %action to pass the dash-prefix safety check
    (bsc#1262098, CVE-2026-6100).
  - gh-146581: Fix vulnerability in shutil.unpack_archive() for
    ZIP files on Windows which allowed to write files outside
    of the destination tree if the patch in the archive
    contains a Windows drive prefix. Now such invalid paths
    will be skipped. Files containing “..” in the name (like
    “foo..bar”) are no longer skipped.
  - gh-146333: Fix quadratic backtracking in
    configparser.RawConfigParser option parsing regexes (OPTCRE
    and OPTCRE_NV). A crafted configuration line with many
    whitespace characters could cause excessive CPU usage.
  - gh-146211: Reject CR/LF characters in tunnel request
    headers for the HTTPConnection.set_tunnel() method.
    (bsc#1261969, CVE-2026-1502)
  - Core and Builtins
  - gh-151112: Fix a crash in the compiler that could occur
    when running out of memory.
  - gh-151126: Fix a crash, when there’s no memory left on
    a device, which happened in:
  - code compilation - _winapi.CreateProcess()
  - Now these places raise proper MemoryError errors.
  - gh-150633: Fix the frozen importer accepting module names
    with embedded null bytes, which caused it to bypass the
    sys.modules cache and create duplicate module objects.
  - gh-149156: Fix an intermittent crash after os.fork() when
    perf trampoline profiling is enabled and the child returns
    through trampoline frames inherited from the parent
    process.
  - gh-149449: Fix a use-after-free crash when the unicodedata
    module was removed from sys.modules and garbage-collected
    between calls that decode \N{...} escapes or use the
    namereplace codec error handler.
  - gh-148450: Fix abc.register() so it invalidates type
    version tags for registered classes.
  - gh-150207: Fix a crash when a memory allocation fails
    during tokenizer initialization. A proper MemoryError is
    now raised instead.
  - gh-150107: asyncio: sendfile() and sock_sendfile() event
    loop methods now call file.seek(offset) if file has
    a seek() method, even if offset is 0 (default value).
  - gh-150146: Fix a crash on a complex type variable
    substitution.
  - from typing import TypeVar;
    memoryview[TypeVar("")][*typing.Mapping[..., ...]] used to
    fail due to missing NULL check on _unpack_args C function
    call.
  - gh-149590: Fix crash when faulthandler is imported more
    than once.
  - gh-149738: sqlite3: Disallow removing row_factory and
    text_factory attributes of a connection to prevent a crash
    on a query.
  - gh-139808: Add branch protections for AArch64 (BTI/PAC) in
    assembly code used by -X perf_jit (Linux perf profiler
    integration).
  - gh-148820: Fix a race in _PyRawMutex on the free-threaded
    build where a Py_PARK_INTR return from _PySemaphore_Wait
    could let the waiter destroy its semaphore before the
    unlocking thread’s _PySemaphore_Wakeup completed, causing
    a fatal ReleaseSemaphore error.
  - gh-148653: Forbid marshalling recursive code objects which
    cannot be correctly unmarshalled.
  - gh-148390: Fix an undefined behavior in memoryview when
    using the native boolean format (?) in cast(). Previously,
    on some common platforms, calling
    memoryview(b).cast("?").tolist() incorrectly returned
    [False] instead of [True] for any even byte b. Patch by
    Bénédikt Tran.
  - gh-148418: Fix a possible reference leak in a corrupted
    TYPE_CODE marshal stream.
  - gh-148222: Fix vectorcall support in types.GenericAlias
    when the underlying type does not support the vectorcall
    protocol. Fix possible leaks in types.GenericAlias and
    types.UnionType in case of memory error.
  - gh-145376: Fix reference leaks in various unusual error
    scenarios.
  - C API
  - gh-150907: Fix dynamic_annotations.h header file when built
    with C++ and Valgrind: add extern "C++" scope for the C++
    template. Patch by Victor Stinner.
  - Build
  - gh-149351: Avoid possible broken macOS framework install
    names when DESTDIR is specified during builds.
  - gh-146475: Block Apple Clang from being used to build the
    JIT as it ships without required LLVM tools.
  - gh-148535: No longer use the gcc -fprofile-update=atomic
    flag on i686. The flag has been added to fix a random GCC
    internal error on PGO build (gh-145801) caused by
    corruption of profile data (.gcda files). The problem is
    that it makes the PGO build way slower (up to 47x slower)
    on i686. Since the GCC internal error was not seen on i686
    so far, don’t use -fprofile-update=atomic on i686 anymore.
    Patch by Victor Stinner.
  - Library
  - gh-150913: Fix sqlite3.Blob slice assignment to raise
    TypeError and IndexError for type and size mismatches
    respectively, even when the target slice is empty.
  - gh-143008: Fix race conditions when re-initializing
    a io.TextIOWrapper object.
  - gh-150685: Update bundled pip to 26.1.2
  - gh-150406: Fix a possible crash occurring during socket
    module initialization when the system is out of memory on
    platforms without a reentrant gethostbyname.
  - gh-150372: readline: Fix a potential crash during tab
    completion caused by an out-of-memory error during module
    initialization.
  - gh-150175: Fix race condition in
    unittest.mock.ThreadingMock where concurrent calls could
    lose increments to call_count and other attributes due to
    a missing lock in _increment_mock_call.
  - gh-84353: Preserve non-UTF-8 encoded filenames when
    appending to a zipfile.ZipFile. Previously, non-ASCII names
    stored in a legacy encoding (without the UTF-8 flag bit
    set) could be corrupted when the central directory was
    rewritten: they were decoded as cp437 and then re-stored as
    UTF-8.
  - gh-149995: Update various docstrings in typing.
  - gh-88726: The email package now uses standard MIME charset
    names “gb2312” and “big5” instead of non-standard names
    “eucgb2312_cn” and “big5_tw”.
  - gh-149571: Fix the C implementation of
    xml.etree.ElementTree.Element.itertext(): it no longer
    emits text for comments and processing instructions.
  - gh-149921: Fix reference leaks in error paths of the
    _interpchannels and _interpqueues extension modules.
  - gh-149801: Add IANA registered names and aliases with
    leading zeros before number (like IBM00858, CP00858,
    IBM01140, CP01140) for corresponding codecs.
  - gh-149701: Fix bad return code from Lib/venv/bin/activate
    if hashing is disabled
  - gh-112821: In the REPL, autocompletion might run arbitrary
    code in the getter of a descriptor. If that getter raised
    an exception, autocompletion would fail to present any
    options for the entire object. Autocompletion now works as
    expected for these objects.
  - gh-149388: Make asyncio.windows_utils.PipeHandle closing
    idempotent.
  - gh-149489: Fix ElementTree serialization to HTML. The
    content of elements “xmp”, “iframe”, “noembed”, “noframes”,
    and “plaintext” is no longer escaped. The “plaintext”
    element no longer have the closing tag.
  - gh-149377: Update bundled pip to 26.1.1
  - gh-149231: In tomllib, the number of parts in TOML keys is
    now limited.
  - gh-149117: Fix runpy.run_module() and runpy.run_path() to
    set the name attribute on the ImportError they raise.
  - gh-149148: ensurepip: Upgrade bundled pip to 26.1. This
    version fixes the CVE 2026-3219 vulnerability. Patch by
    Victor Stinner.
  - gh-148093: Fix an out-of-bounds read of one byte in
    binascii.a2b_uu(). Raise binascii.Error, instead of reading
    past the buffer end.
  - gh-148914: Fix memoization of in-band PickleBuffer in the
    Python implementation of pickle. Previously, identical
    PickleBuffers did not preserve identity, and empty writable
    PickleBuffer memoized an empty bytearray object in place of
    b'', so the following references to b'' were unpickled as
    an empty bytearray object.
  - gh-138907: Support RFC 9309 in urllib.robotparser.
  - gh-148954: Fix XML injection vulnerability in
    xmlrpc.client.dumps() where the methodname was not being
    escaped before interpolation into the XML body.
  - gh-148801: xml.etree.ElementTree: Fix a crash in
    Element.__deepcopy__ on deeply nested trees.
  - gh-148735: xml.etree.ElementTree: Fix a use-after-free in
    Element.findtext when the element tree is mutated
    concurrently during the search.
  - gh-146553: Fix infinite loop in typing.get_type_hints()
    when __wrapped__ forms a cycle. Patch by Shamil Abdulaev.
  - gh-148508: An intermittent timing error when running SSL
    tests on iOS has been resolved.
  - gh-148518: If an email containing an address header that
    ended in an open double quote was parsed with
    a non-compat32 policy, accessing the username attribute of
    the mailbox accessed through that header object would
    result in an IndexError. It now correctly returns an empty
    string as the result.
  - gh-148370: configparser: prevent quadratic behavior when
    a ParsingError is raised after a parser fails to parse
    multiple lines. Patch by Bénédikt Tran.
  - gh-148254: Use singular “sec” instead of “secs” in timeit
    verbose output for consistency with other time units.
  - gh-148192: email.generator.Generator._make_boundary could
    fail to detect a duplicate boundary string if linesep was
    not n. It now correctly detects boundary strings when
    linesep is rn as well.
  - gh-146313: Fix a deadlock in multiprocessing’s resource
    tracker where the parent process could hang indefinitely in
    os.waitpid() during interpreter shutdown if a child created
    via os.fork() still held the resource tracker’s pipe open.
  - gh-145831: Fix email.quoprimime.decode() leaving a stray \r
    when eol='\r\n' by stripping the full eol string instead of
    one character.
  - gh-145105: Fix crash in csv reader when iterating with
    a re-entrant iterator that calls next() on the same reader
    from within __next__.
  - gh-130750: Restore quoting of choices in argparse error
    messages for improved clarity and consistency with
    documentation.
  - gh-105936: Attempting to mutate non-field attributes of
    dataclasses with both frozen and slots being True now
    raises FrozenInstanceError instead of TypeError. Their
    non-dataclass subclasses can now freely mutate non-field
    attributes, and the original non-slotted class can be
    garbage collected. The fix also handles the case of an
    empty __class__ cell on a function found within the class
    (gh-148947).
  - gh-142516: ssl: fix reference leaks in ssl.SSLContext
    objects. Patch by Bénédikt Tran.
  - gh-142831: Fix a crash in the json module where
    a use-after-free could occur if the object being encoded is
    modified during serialization.
  - gh-140287: The asyncio REPL now handles exceptions when
    executing PYTHONSTARTUP scripts. Patch by Bartosz Sławecki.
  - gh-90949: Add
    SetBillionLaughsAttackProtectionActivationThreshold() and
    SetBillionLaughsAttackProtectionMaximumAmplification() to
    xmlparser objects to tune protections against billion
    laughs attacks. Patch by Bénédikt Tran.
  - gh-132631: Fix “I/O operation on closed file” when parsing
    JSON Lines file with JSON CLI.
  - gh-128110: Fix bug in the parsing of email address headers
    that could result in extraneous spaces in the decoded text
    when using a modern email policy. Space between pairs of
    adjacent RFC 2047 encoded-words is now ignored, per section
    6.2 (and consistent with existing parsing of unstructured
    headers like Subject).
  - gh-107398: Fix tarfile stream mode exception when process
    the file with the gzip extra field.
  - gh-123853: Update the table of Windows language code
    identifiers (LCIDs) used by locale.getdefaultlocale() on
    Windows to protocol version 16.0 (2024-04-23).
  - gh-70039: Fixed bug where smtplib.SMTP.starttls() could
    fail if smtplib.SMTP.connect() is called explicitly rather
    than implicitly.
  - gh-83281: email: improve handling trailing garbage in
    address lists to avoid throwing AttributeError in certain
    edge cases
  - gh-91099: imaplib.IMAP4.login() now raises exceptions with
    str instead of bytes. Patch by Florian Best.
  - IDLE
  - bpo-6699: Warn the user if a file will be overwritten when
    saving.
  - Documentation
  - gh-150319: Generic builtin and standard library types now
    document the meaning of their type parameters.
  - gh-148663: Document that calendar.IllegalMonthError is
    a subclass of both ValueError and IndexError since Python
    3.12.
  - gh-146646: Document that glob.glob(), glob.iglob(),
    pathlib.Path.glob(), and pathlib.Path.rglob() silently
    suppress OSError exceptions raised from scanning the
    filesystem.
  - gh-109503: Fix documentation for shutil.move() on usage of
    os.rename() since nonatomic move might be used even if the
    files are on the same filesystem. Patch by Fang Li
  - Tests
  - gh-151130: Add more tests for PyWeakref_* C API.
  - gh-149776: Fix test_socket on Linux kernel 7.1 and newer:
    skip UDP Lite tests if it’s not supported. Patch by Victor
    Stinner.
- Remove upstreamed patches:
  - CVE-2026-1502-reject-CRLF-HTTP-tunnel.patch
  - CVE-2026-4786-webbrowser-open-action.patch
  - CVE-2026-6019-Morsel-js_output.patch
  - CVE-2026-6100-use-after-free-decompression.patch
* Sun Jun 07 2026 mcepl@cepl.eu
- Remove remainders of installation of `python3`-related files.
* Sat Jun 06 2026 mcepl@suse.com
- Keep unversioned Python 3 development entry points in
  python3-devel: python313-devel no longer provides python3-devel
  and no longer owns libpython3.so, python3-config, python3.pc,
  or python3-embed.pc. Do not package versioned GIL pkg-config
  files in nogil-devel. Also, fix regular expressions in
  rpmlintrc.
* Thu Jun 04 2026 mcepl@suse.com
- Add test_UDPLITE_support.patch (bsc#1263787,
  gh#python/cpython!149081) improving testing for the support of
  IPPROTO_UDPLITE, which could be not present although header
  files are.
* Thu Jun 04 2026 mcepl@suse.com
- Add missing BR `crypto-policies-scripts` (need for the fix of
  bsc#1211301).
* Mon Apr 27 2026 mcepl@cepl.eu
- CVE-2026-6019: protect against HTML injection by
  Base64-encoding cookie values embedded in JS (bsc#1262654,
  gh#python/cpython#90309)
  CVE-2026-6019-Morsel-js_output.patch
* Sat Apr 25 2026 mcepl@cepl.eu
- CVE-2026-1502: reject CR/LF in HTTP tunnel request headers
  (bsc#1261969, gh#python/cpython#146211)
  CVE-2026-1502-reject-CRLF-HTTP-tunnel.patch
* Sat Apr 25 2026 mcepl@cepl.eu
- CVE-2026-4786: fix webbrowser %action substitution bypass of
  dash-prefix check (bsc#1262319, gh#python/cpython#148169)
  CVE-2026-4786-webbrowser-open-action.patch
* Fri Apr 24 2026 mcepl@cepl.eu
- CVE-2026-6100: prevent dangling pointer, which can end in the
  use-after-free error (bsc#1262098, gh#python/cpython#148395)
  CVE-2026-6100-use-after-free-decompression.patch
Version: 3.13.13-160000.1.1
* Wed Apr 08 2026 mcepl@cepl.eu
- Update to 3.13.13
  - Security
  - gh-145986: xml.parsers.expat: Fixed a crash caused by
    unbounded C recursion when converting deeply nested XML
    content models with ElementDeclHandler(). This addresses
    CVE 2026-4224 (bsc#1259735, CVE-2026-4224).
  - gh-145599: Reject control characters in http.cookies.Morsel
    update() and js_output(). This addresses CVE 2026-3644
    (bsc#1259734, CVE-2026-3644).
  - gh-145506: Fixes CVE 2026-2297 by ensuring that
    SourcelessFileLoader uses io.open_code() when opening .pyc
    files (bsc#1259240, CVE-2026-2297).
  - gh-144370: Disallow usage of control characters in status
    in wsgiref.handlers to prevent HTTP header injections.
    Patch by Benedikt Johannes.
  - gh-143930: Reject leading dashes in URLs passed to
    webbrowser.open() (bsc#1260026, CVE-2026-4519).
  - Library
  - gh-144503: Fix a regression introduced in 3.14.3 and
    3.13.12 where the multiprocessing forkserver start method
    would fail with BrokenPipeError when the parent process had
    a very large sys.argv. The argv is now passed to the
    forkserver as separate command-line arguments rather than
    being embedded in the -c command string, avoiding the
    operating system’s per-argument length limit.
  - gh-146613: itertools: Fix a crash in itertools.groupby()
    when the grouper iterator is concurrently mutated.
  - gh-146080: ssl: fix a crash when an SNI callback tries to
    use an SSL object that has already been garbage-collected.
    Patch by Bénédikt Tran.
  - gh-146090: sqlite3: fix a crash when
    sqlite3.Connection.create_collation() fails with
    SQLITE_BUSY. Patch by Bénédikt Tran.
  - gh-146090: sqlite3: properly raise MemoryError instead of
    SystemError when a context callback fails to be allocated.
    Patch by Bénédikt Tran.
  - gh-145633: Fix struct.pack('f', float): use PyFloat_Pack4()
    to raise OverflowError. Patch by Sergey B Kirpichev and
    Victor Stinner.
  - gh-146310: The ensurepip module no longer looks for
    pip-*.whl wheel packages in the current directory.
  - gh-146083: Update bundled libexpat to version 2.7.5.
  - gh-146076: zoneinfo: fix crashes when deleting _weak_cache
    from a zoneinfo.ZoneInfo subclass.
  - gh-146054: Limit the size of encodings.search_function()
    cache. Found by OSS Fuzz in #493449985.
  - gh-145883: zoneinfo: Fix heap buffer overflow reads from
    malformed TZif data. Found by OSS Fuzz, issues #492245058
    and #492230068.
  - gh-145750: Avoid undefined behaviour from signed integer
    overflow when parsing format strings in the struct module.
    Found by OSS Fuzz in #488466741.
  - gh-145492: Fix infinite recursion in
    collections.defaultdict __repr__ when a defaultdict
    contains itself. Based on analysis by KowalskiThomas in
    gh-145492.
  - gh-145623: Fix crash in struct when calling repr() or
    __sizeof__() on an uninitialized struct.Struct object
    created via Struct.__new__() without calling __init__().
  - gh-145616: Detect Android sysconfig ABI correctly on 32-bit
    ARM Android on 64-bit ARM kernel
  - gh-145376: Fix null pointer dereference in unusual error
    scenario in hashlib.
  - gh-145551: Fix InvalidStateError when cancelling process
    created by asyncio.create_subprocess_exec() or
    asyncio.create_subprocess_shell(). Patch by Daan De Meyer.
  - gh-145417: venv: Prevent incorrect preservation of SELinux
    context when copying the Activate.ps1 script. The script
    inherited the SELinux security context of the system
    template directory, rather than the destination project
    directory.
  - gh-145301: hashlib: fix a crash when the initialization of
    the underlying C extension module fails.
  - gh-145264: Base64 decoder (see binascii.a2b_base64(),
    base64.b64decode(), etc) no longer ignores excess data
    after the first padded quad in non-strict (default) mode.
    Instead, in conformance with RFC 4648, section 3.3, it now
    ignores the pad character, “=”, if it is present before the
    end of the encoded data (bsc#1261970, CVE-2026-3446).
  - gh-145158: Avoid undefined behaviour from signed integer
    overflow when parsing format strings in the struct module.
  - gh-144984: Fix crash in
    xml.parsers.expat.xmlparser.ExternalEntityParserCreate()
    when an allocation fails. The error paths could dereference
    NULL handlers and double-decrement the parent parser’s
    reference count.
  - gh-88091: Fix unicodedata.decomposition() for Hangul
    characters.
  - gh-144835: Added missing explanations for some parameters
    in glob.glob() and glob.iglob().
  - gh-144833: Fixed a use-after-free in ssl when SSL_new()
    returns NULL in newPySSLSocket(). The error was reported
    via a dangling pointer after the object had already been
    freed.
  - gh-144259: Fix inconsistent display of long multiline
    pasted content in the REPL.
  - gh-144156: Fix the folding of headers by the email library
    when RFC 2047 encoded words are used. Now whitespace is
    correctly preserved and also correctly added between
    adjacent encoded words. The latter property was broken by
    the fix for gh-92081, which mostly fixed previous failures
    to preserve whitespace.
  - gh-66305: Fixed a hang on Windows in the tempfile module
    when trying to create a temporary file or subdirectory in
    a non-writable directory.
  - gh-140814: multiprocessing.freeze_support() no longer sets
    the default start method as a side effect, which previously
    caused a subsequent multiprocessing.set_start_method() call
    to raise RuntimeError.
  - gh-144475: Calling repr() on functools.partial() is now
    safer when the partial object’s internal attributes are
    replaced while the string representation is being
    generated.
  - gh-144538: Bump the version of pip bundled in ensurepip to
    version 26.0.1
  - gh-144363: Update bundled libexpat to 2.7.4
  - gh-143637: Fixed a crash in socket.sendmsg() that could
    occur if ancillary data is mutated re-entrantly during
    argument parsing.
  - gh-143880: Fix data race in functools.partial() in the free
    threading build.
  - gh-143543: Fix a crash in itertools.groupby that could
    occur when a user-defined __eq__() method re-enters the
    iterator during key comparison.
  - gh-140652: Fix a crash in _interpchannels.list_all() after
    closing a channel.
  - gh-143698: Allow scheduler and setpgroup arguments to be
    explicitly None when calling os.posix_spawn() or
    os.posix_spawnp(). Patch by Bénédikt Tran.
  - gh-143698: Raise TypeError instead of SystemError when the
    scheduler in os.posix_spawn() or os.posix_spawnp() is not
    a tuple. Patch by Bénédikt Tran.
  - gh-143304: Fix ctypes.CDLL to honor the handle parameter on
    POSIX systems.
  - gh-142781: zoneinfo: fix a crash when instantiating
    ZoneInfo objects for which the internal class-level cache
    is inconsistent.
  - gh-142763: Fix a race condition between zoneinfo.ZoneInfo
    creation and zoneinfo.ZoneInfo.clear_cache() that could
    raise KeyError.
  - gh-142787: Fix assertion failure in sqlite3 blob subscript
    when slicing with indices that result in an empty slice.
  - gh-142352: Fix asyncio.StreamWriter.start_tls() to transfer
    buffered data from StreamReader to the SSL layer,
    preventing data loss when upgrading a connection to TLS
    mid-stream (e.g., when implementing PROXY protocol
    support).
  - gh-141707: Don’t change tarfile.TarInfo type from AREGTYPE
    to DIRTYPE when parsing GNU long name or link headers
    (bsc#1259611, CVE-2025-13462).
  - gh-139933: Improve AttributeError suggestions for classes
    with a custom __dir__() method returning a list of
    unsortable values. Patch by Bénédikt Tran.
  - gh-138891: Fix SyntaxError when inspect.get_annotations(f,
    eval_str=True) is called on a function annotated with a PEP
    646 star_expression
  - gh-137335: Get rid of any possibility of a name conflict
    for named pipes in multiprocessing and asyncio on Windows,
    no matter how small.
  - gh-80667: Support lookup for Tangut Ideographs in
    unicodedata.
  - bpo-40243: Fix unicodedata.ucd_3_2_0.numeric() for
    non-decimal values.
  - Documentation
  - gh-126676: Expand argparse documentation for type=bool with
    a demonstration of the surprising behavior and pointers to
    common alternatives.
  - gh-145450: Document missing public wave.Wave_write getter
    methods.
  - Core and Builtins
  - gh-148157: Fix an unlikely crash when parsing an invalid
    type comments for function parameters. Found by OSS Fuzz in
    [#492782951].
  - gh-146615: Fix a crash in __get__() for METH_METHOD
    descriptors when an invalid (non-type) object is passed as
    the second argument. Patch by Steven Sun.
  - gh-146128: Fix a bug which could cause constant values to
    be partially corrupted in AArch64 JIT code. This issue is
    theoretical, and hasn’t actually been observed in
    unmodified Python interpreters.
  - gh-146250: Fixed a memory leak in SyntaxError when
    re-initializing it.
  - gh-146245: Fixed reference leaks in socket when audit hooks
    raise exceptions in socket.getaddrinfo() and
    socket.sendto().
  - gh-146227: Fix wrong type in _Py_atomic_load_uint16 in the
    C11 atomics backend (pyatomic_std.h), which used a 32-bit
    atomic load instead of 16-bit. Found by Mohammed Zuhaib.
  - gh-146056: Fix repr() for lists containing NULLs.
  - gh-145990: python --help-env sections are now sorted by
    environment variable name.
  - gh-145376: Fix GC tracking in structseq.__replace__().
  - gh-142183: Avoid a pathological case where repeated calls
    at a specific stack depth could be significantly slower.
  - gh-145783: Fix an unlikely crash in the parser when certain
    errors were erroneously not propagated. Found by OSS Fuzz
    in #491369109.
  - gh-145701: Fix SystemError when __classdict__ or
    __conditional_annotations__ is in a class-scope inlined
    comprehension. Found by OSS Fuzz in #491105000.
  - gh-145335: Fix a crash in os.pathconf() when called with -1
    as the path argument.
  - gh-145234: Fixed a SystemError in the parser when an
    encoding cookie (for example, UTF-7) decodes to carriage
    returns (\r). Newlines are now normalized after decoding in
    the string tokenizer.
  - Patch by Pablo Galindo.
  - gh-130555: Fix use-after-free in dict.clear() when the
    dictionary values are embedded in an object and
    a destructor causes re-entrant mutation of the dictionary.
  - gh-145008: Fix a bug when calling certain methods at the
    recursion limit which manifested as a corruption of
    Python’s operand stack. Patch by Ken Jin.
  - gh-144872: Fix heap buffer overflow in the parser found by
    OSS-Fuzz.
  - gh-144766: Fix a crash in fork child process when perf
    support is enabled.
  - gh-144759: Fix undefined behavior in the lexer when start
    and multi_line_start pointers are NULL in
    _PyLexer_remember_fstring_buffers() and
    _PyLexer_restore_fstring_buffers(). The NULL pointer
    arithmetic (NULL - valid_pointer) is now guarded with
    explicit NULL checks.
  - gh-144601: Fix crash when importing a module whose PyInit
    function raises an exception from a subinterpreter.
  - gh-143636: Fix a crash when calling
    SimpleNamespace.__replace__() on non-namespace instances.
    Patch by Bénédikt Tran.
  - gh-143650: Fix race condition in importlib where a thread
    could receive a stale module reference when another
    thread’s import fails.
  - gh-140594: Fix an out of bounds read when a single NUL
    character is read from the standard input. Patch by Shamil
    Abdulaev.
  - gh-91636: While performing garbage collection, clear
    weakrefs to unreachable objects that are created during
    running of finalizers. If those weakrefs were are not
    cleared, they could reveal unreachable objects.
  - gh-130327: Fix erroneous clearing of an object’s __dict__
    if overwritten at runtime.
  - gh-80667: Literals using the \N{name} escape syntax can now
    construct CJK ideographs and Hangul syllables using
    case-insensitive names.
  - Build
  - gh-146541: The Android testbed can now be built for 32-bit
    ARM and x86 targets.
  - gh-146450: The Android build script was modified to improve
    parity with other platform build scripts.
  - gh-145801: When Python build is optimized with GCC using
    PGO, use -fprofile-update=atomic option to use atomic
    operations when updating profile information. This option
    reduces the risk of gcov Data Files (.gcda) corruption
    which can cause random GCC crashes. Patch by Victor
    Stinner.
  - gh-129259: Fix AIX build failures caused by incorrect
    struct alignment in _Py_CODEUNIT and _Py_BackoffCounter by
    adding AIX-specific #pragma pack directives.
  - Tests
  - gh-144418: The Android testbed’s emulator RAM has been
    increased from 2 GB to 4 GB.
  - gh-146202: Fix a race condition in regrtest: make sure that
    the temporary directory is created in the worker process.
    Previously, temp_cwd() could fail on Windows if the “build”
    directory was not created. Patch by Victor Stinner.
  - gh-144739: When Python was compiled with system expat older
    then 2.7.2 but tests run with newer expat, still skip
    test.test_pyexpat.MemoryProtectionTest.
- Removed upstreamed patches:
  - CVE-2025-13462-tarinfo-header-parse.patch
  - CVE-2026-2297-SourcelessFileLoader-io_open_code.patch
  - CVE-2026-3479-pkgutil_get_data.patch
  - CVE-2026-3644-cookies-Morsel-update-II.patch
  - CVE-2026-4224-expat-unbound-C-recursion.patch
  - CVE-2026-4519-webbrowser-open-dashes.patch
* Thu Apr 02 2026 mcepl@cepl.eu
- Add CVE-2026-3479-pkgutil_get_data.patch pkgutil.get_data() has
  the same security model as open(). The documented limitations
  ensure compatibility with non-filesystem loaders; Python
  doesn't check that. (bsc#1259989, CVE-2026-3479,
  gh#python/cpython#146121).
* Fri Mar 27 2026 mcepl@cepl.eu
- Add CVE-2026-4519-webbrowser-open-dashes.patch to reject
  leading dashes in webbrowser URLs (bsc#1260026, CVE-2026-4519,
  gh#python/cpython#143930).
* Wed Mar 25 2026 mcepl@cepl.eu
- Add CVE-2025-13462-tarinfo-header-parse.patch which skips
  TarInfo DIRTYPE normalization during GNU long name handling
  (bsc#1259611, CVE-2025-13462).
* Mon Mar 23 2026 mcepl@cepl.eu
- Add CVE-2026-4224-expat-unbound-C-recursion.patch avoiding
  unbound C recursion in conv_content_model in pyexpat.c
  (bsc#1259735, CVE-2026-4224).
* Mon Mar 23 2026 mcepl@cepl.eu
- Add CVE-2026-3644-cookies-Morsel-update-II.patch to reject
  control characters in http.cookies.Morsel.update() and
  http.cookies.BaseCookie.js_output (bsc#1259734, CVE-2026-3644).
* Wed Mar 18 2026 mcepl@cepl.eu
- Fix changelog
* Tue Mar 17 2026 mmachova@suse.com
- Adapt %suse_version checks to support new %suse_version design for
  16.1 and following (jsc#PED-15850)
* Fri Mar 13 2026 mcepl@cepl.eu
- Add CVE-2026-2297-SourcelessFileLoader-io_open_code.patch
  ensuring that `SourcelessFileLoader` uses `io.open_code` when
  opening `.pyc` files (bsc#1259240, CVE-2026-2297).
Version: 3.13.12-160000.1.1
* Fri Feb 06 2026 mcepl@cepl.eu
- Update to 3.13.12: Python 3.13.12 final Release date:
  2026-02-03
  - Tools/Demos
  - gh-142095: Make gdb ‘py-bt’ command use frame from thread
    local state when available. Patch by Sam Gross and Victor
    Stinner.
  - Tests
  - gh-144415: The Android testbed now distinguishes between
    stdout/stderr messages which were triggered by a newline,
    and those triggered by a manual call to flush. This fixes
    logging of progress indicators and similar content.
  - gh-65784: Add support for parametrized resource wantobjects
    in regrtests, which allows to run Tkinter tests with the
    specified value of tkinter.wantobjects, for example -u
    wantobjects=0.
  - gh-143553: Add support for parametrized resources, such as
  - u xpickle=2.7.
  - gh-142836: Accommodated Solaris in
    test_pdb.test_script_target_anonymous_pipe.
  - gh-129401: Fix a flaky test in test_repr_rlock that checks
    the representation of multiprocessing.RLock.
  - bpo-31391: Forward-port test_xpickle from Python 2 to
    Python 3 and add the resource back to test’s command line.
  - Security
  - gh-144125: BytesGenerator will now refuse to serialize
    (write) headers that are unsafely folded or delimited; see
    verify_generated_headers. (Contributed by Bas Bloemsaat and
    Petr Viktorin in gh-121650) (bsc#1257181, CVE-2026-1299).
  - gh-143935: Fixed a bug in the folding of comments when
    flattening an email message using a modern email policy.
    Comments consisting of a very long sequence of non-foldable
    characters could trigger a forced line wrap that omitted
    the required leading space on the continuation line,
    causing the remainder of the comment to be interpreted as
    a new header field. This enabled header injection with
    carefully crafted inputs (bsc#1257029, CVE-2025-11468).
  - gh-143925: Reject control characters in data: URL media
    types (bsc#1257046, CVE-2025-15282).
  - gh-143919: Reject control characters in http.cookies.Morsel
    fields and values (bsc#1257031, CVE-2026-0672).
  - gh-143916: Reject C0 control characters within
    wsgiref.headers.Headers fields, values, and parameters
    (bsc#1257042, CVE-2026-0865).
  - Library
  - gh-144380: Improve performance of io.BufferedReader line
    iteration by ~49%.
  - gh-144169: Fix three crashes when non-string keyword
    arguments are supplied to objects in the ast module.
  - gh-144100: Fixed a crash in ctypes when using a deprecated
    POINTER(str) type in argtypes. Instead of aborting, ctypes
    now raises a proper Python exception when the pointer
    target type is unresolved.
  - gh-144050: Fix stat.filemode() in the pure-Python
    implementation to avoid misclassifying invalid mode values
    as block devices.
  - gh-144023: Fixed validation of file descriptor 0 in posix
    functions when used with follow_symlinks parameter.
  - gh-143999: Fix an issue where inspect.getgeneratorstate()
    and inspect.getcoroutinestate() could fail for generators
    wrapped by types.coroutine() in the suspended state.
  - gh-143706: Fix multiprocessing forkserver so that sys.argv
    is correctly set before __main__ is preloaded. Previously,
    sys.argv was empty during main module import in forkserver
    child processes. This fixes a regression introduced in
    3.13.8 and 3.14.1. Root caused by Aaron Wieczorek, test
    provided by Thomas Watson, thanks!
  - gh-143638: Forbid reentrant calls of the pickle.Pickler and
    pickle.Unpickler methods for the C implementation.
    Previously, this could cause crash or data corruption, now
    concurrent calls of methods of the same object raise
    RuntimeError.
  - gh-78724: Raise RuntimeError’s when user attempts to call
    methods on half-initialized Struct objects, For example,
    created by Struct.__new__(Struct). Patch by Sergey
    B Kirpichev.
  - gh-143602: Fix a inconsistency issue in write() that leads
    to unexpected buffer overwrite by deduplicating the buffer
    exports.
  - gh-143547: Fix sys.unraisablehook() when the hook raises an
    exception and changes sys.unraisablehook(): hold a strong
    reference to the old hook. Patch by Victor Stinner.
  - gh-143378: Fix use-after-free crashes when a BytesIO object
    is concurrently mutated during write() or writelines().
  - gh-143346: Fix incorrect wrapping of the Base64 data in
    plistlib._PlistWriter when the indent contains a mix of
    tabs and spaces.
  - gh-143310: tkinter: fix a crash when a Python list is
    mutated during the conversion to a Tcl object (e.g., when
    setting a Tcl variable). Patch by Bénédikt Tran.
  - gh-143309: Fix a crash in os.execve() on non-Windows
    platforms when given a custom environment mapping which is
    then mutated during parsing. Patch by Bénédikt Tran.
  - gh-143308: pickle: fix use-after-free crashes when
    a PickleBuffer is concurrently mutated by a custom buffer
    callback during pickling. Patch by Bénédikt Tran and Aaron
    Wieczorek.
  - gh-143237: Fix support of named pipes in the rotating
    logging handlers.
  - gh-143249: Fix possible buffer leaks in Windows overlapped
    I/O on error handling.
  - gh-143241: zoneinfo: fix infinite loop in
    ZoneInfo.from_file when parsing a malformed TZif file.
    Patch by Fatih Celik.
  - gh-142830: sqlite3: fix use-after-free crashes when the
    connection’s callbacks are mutated during a callback
    execution. Patch by Bénédikt Tran.
  - gh-143200: xml.etree.ElementTree: fix use-after-free
    crashes in __getitem__() and __setitem__() methods of
    Element when the element is concurrently mutated. Patch by
    Bénédikt Tran.
  - gh-142195: Updated timeout evaluation logic in subprocess
    to be compatible with deterministic environments like
    Shadow where time moves exactly as requested.
  - gh-143145: Fixed a possible reference leak in ctypes when
    constructing results with multiple output parameters on
    error.
  - gh-122431: Corrected the error message in
    readline.append_history_file() to state that nelements must
    be non-negative instead of positive.
  - gh-143004: Fix a potential use-after-free in
    collections.Counter.update() when user code mutates the
    Counter during an update.
  - gh-143046: The asyncio REPL no longer prints copyright and
    version messages in the quiet mode (-q). Patch by Bartosz
    Sławecki.
  - gh-140648: The asyncio REPL now respects the -I flag
    (isolated mode). Previously, it would load and execute
    PYTHONSTARTUP even if the flag was set. Contributed by
    Bartosz Sławecki.
  - gh-142991: Fixed socket operations such as recvfrom() and
    sendto() for FreeBSD divert(4) socket.
  - gh-143010: Fixed a bug in mailbox where the precise timing
    of an external event could result in the library opening an
    existing file instead of a file it expected to create.
  - gh-142881: Fix concurrent and reentrant call of
    atexit.unregister().
  - gh-112127: Fix possible use-after-free in
    atexit.unregister() when the callback is unregistered
    during comparison.
  - gh-142783: Fix zoneinfo use-after-free with descriptor
    _weak_cache. a descriptor as _weak_cache could cause
    crashes during object creation. The fix ensures proper
    reference counting for descriptor-provided objects.
  - gh-142754: Add the ownerDocument attribute to
    xml.dom.minidom elements and attributes created by directly
    instantiating the Element or Attr class. Note that this way
    of creating nodes is not supported; creator functions like
    xml.dom.Document.documentElement() should be used instead.
  - gh-142784: The asyncio REPL now properly closes the loop
    upon the end of interactive session. Previously, it could
    cause surprising warnings. Contributed by Bartosz Sławecki.
  - gh-142555: array: fix a crash in a[i] = v when converting
    i to an index via i.__index__ or i.__float__ mutates the
    array.
  - gh-142594: Fix crash in TextIOWrapper.close() when the
    underlying buffer’s closed property calls detach().
  - gh-142451: hmac: Ensure that the HMAC.block_size attribute
    is correctly copied by HMAC.copy. Patch by Bénédikt Tran.
  - gh-142495: collections.defaultdict now prioritizes
    __setitem__() when inserting default values from
    default_factory. This prevents race conditions where
    a default value would overwrite a value set before
    default_factory returns.
  - gh-142651: unittest.mock: fix a thread safety issue where
    Mock.call_count may return inaccurate values when the mock
    is called concurrently from multiple threads.
  - gh-142595: Added type check during initialization of the
    decimal module to prevent a crash in case of broken stdlib.
    Patch by Sergey B Kirpichev.
  - gh-142517: The non-compat32 email policies now correctly
    handle refolding encoded words that contain bytes that can
    not be decoded in their specified character set. Previously
    this resulted in an encoding exception during folding.
  - gh-112527: The help text for required options in argparse
    no longer extended with “ (default: None)”.
  - gh-142315: Pdb can now run scripts from anonymous pipes
    used in process substitution. Patch by Bartosz Sławecki.
  - gh-142282: Fix winreg.QueryValueEx() to not accidentally
    read garbage buffer under race condition.
  - gh-75949: Fix argparse to preserve | separators in mutually
    exclusive groups when the usage line wraps due to length.
  - gh-68552: MisplacedEnvelopeHeaderDefect and Missing header
    name defects are now correctly passed to the handle_defect
    method of policy in FeedParser.
  - gh-142006: Fix a bug in the email.policy.default folding
    algorithm which incorrectly resulted in a doubled newline
    when a line ending at exactly max_line_length was followed
    by an unfoldable token.
  - gh-105836: Fix asyncio.run_coroutine_threadsafe() leaving
    underlying cancelled asyncio task running.
  - gh-139971: pydoc: Ensure that the link to the online
    documentation of a stdlib module is correct.
  - gh-139262: Some keystrokes can be swallowed in the new
    PyREPL on Windows, especially when used together with the
    ALT key. Fix by Chris Eibl.
  - gh-138897: Improved license/copyright/credits display in
    the REPL: now uses a pager.
  - gh-79986: Add parsing for References and In-Reply-To
    headers to the email library that parses the header content
    as lists of message id tokens. This prevents them from
    being folded incorrectly.
  - gh-109263: Starting a process from spawn context in
    multiprocessing no longer sets the start method globally.
  - gh-90871: Fixed an off by one error concerning the backlog
    parameter in create_unix_server(). Contributed by Christian
    Harries.
  - gh-133253: Fix thread-safety issues in linecache.
  - gh-132715: Skip writing objects during marshalling once
    a failure has occurred.
  - gh-127529: Correct behavior of
    asyncio.selector_events.BaseSelectorEventLoop._accept_connection()
    in handling ConnectionAbortedError in a loop. This improves
    performance on OpenBSD.
  - IDLE
  - gh-143774: Better explain the operation of Format / Format
    Paragraph.
  - Documentation
  - gh-140806: Add documentation for enum.bin().
  - Core and Builtins
  - gh-144307: Prevent a reference leak in module teardown at
    interpreter finalization.
  - gh-144194: Fix error handling in perf jitdump
    initialization on memory allocation failure.
  - gh-141805: Fix crash in set when objects with the same hash
    are concurrently added to the set after removing an element
    with the same hash while the set still contains elements
    with the same hash.
  - gh-143670: Fixes a crash in ga_repr_items_list function.
  - gh-143377: Fix a crash in _interpreters.capture_exception()
    when the exception is incorrectly formatted. Patch by
    Bénédikt Tran.
  - gh-143189: Fix crash when inserting a non-str key into
    a split table dictionary when the key matches an existing
    key in the split table but has no corresponding value in
    the dict.
  - gh-143228: Fix use-after-free in perf trampoline when
    toggling profiling while threads are running or during
    interpreter finalization with daemon threads active. The
    fix uses reference counting to ensure trampolines are not
    freed while any code object could still reference them.
    Pach by Pablo Galindo
  - gh-142664: Fix a use-after-free crash in
    memoryview.__hash__ when the __hash__ method of the
    referenced object mutates that object or the view. Patch by
    Bénédikt Tran.
  - gh-142557: Fix a use-after-free crash in bytearray.__mod__
    when the bytearray is mutated while formatting the %-style
    arguments. Patch by Bénédikt Tran.
  - gh-143195: Fix use-after-free crashes in bytearray.hex()
    and memoryview.hex() when the separator’s __len__() mutates
    the original object. Patch by Bénédikt Tran.
  - gh-143135: Set sys.flags.inspect to 1 when PYTHONINSPECT is
    0. Previously, it was set to 0 in this case.
  - gh-143003: Fix an overflow of the shared empty buffer in
    bytearray.extend() when __length_hint__() returns 0 for
    non-empty iterator.
  - gh-143006: Fix a possible assertion error when comparing
    negative non-integer float and int with the same number of
    bits in the integer part.
  - gh-142776: Fix a file descriptor leak in import.c
  - gh-142829: Fix a use-after-free crash in
    contextvars.Context comparison when a custom __eq__ method
    modifies the context via set().
  - gh-142766: Clear the frame of a generator when
    generator.close() is called.
  - gh-142737: Tracebacks will be displayed in fallback mode
    even if io.open() is lost. Previously, this would crash the
    interpreter. Patch by Bartosz Sławecki.
  - gh-142554: Fix a crash in divmod() when
    _pylong.int_divmod() does not return a tuple of length two
    exactly. Patch by Bénédikt Tran.
  - gh-142560: Fix use-after-free in bytearray search-like
    methods (find(), count(), index(), rindex(), and rfind())
    by marking the storage as exported which causes
    reallocation attempts to raise BufferError. For contains(),
    split(), and rsplit() the buffer protocol is used for this.
  - gh-142343: Fix SIGILL crash on m68k due to incorrect
    assembly constraint.
  - gh-141732: Ensure the __repr__() for ExceptionGroup and
    BaseExceptionGroup does not change when the exception
    sequence that was original passed in to its constructor is
    subsequently mutated.
  - gh-100964: Fix reference cycle in exhausted generator
    frames. Patch by Savannah Ostrowski.
  - gh-140373: Correctly emit PY_UNWIND event when generator
    object is closed. Patch by Mikhail Efimov.
  - gh-138568: Adjusted the built-in help() function so that
    empty inputs are ignored in interactive mode.
  - gh-127773: Do not use the type attribute cache for types
    with incompatible MRO.
  - C API
  - gh-142571: PyUnstable_CopyPerfMapFile() now checks that
    opening the file succeeded before flushing.
  - Build
  - gh-142454: When calculating the digest of the JIT stencils
    input, sort the hashed files by filenames before adding
    their content to the hasher. This ensures deterministic
    hash input and hence deterministic hash, independent on
    filesystem order.
  - gh-141808: When running make clean-retain-profile, keep the
    generated JIT stencils. That way, the stencils are not
    generated twice when Profile-guided optimization (PGO) is
    used. It also allows distributors to supply their own
    pre-built JIT stencils.
  - gh-138061: Ensure reproducible builds by making JIT stencil
    header generation deterministic.
- Remove upstreamed patches:
  - CVE-2024-6923-follow-up-EOL-email-headers.patch
  - gh138131-exclude-pycache-from-digest.patch
* Tue Jan 27 2026 mcepl@cepl.eu
- Add CVE-2024-6923-follow-up-EOL-email-headers.patch which is
  a follow-up to the previous fix of CVE-2024-6923 further
  encoding EOL possibly hidden in email headers (bsc#1257181).
Version: 3.13.11-160000.1.1
* Thu Dec 11 2025 mcepl@cepl.eu
- Update to 3.13.11:
  - gh-142145: Remove quadratic behavior in xml.minidom node ID
    cache clearing (CVE-2025-12084, bsc#1254997).
  - gh-119451: Fix a potential memory denial of service in the
    http.client module. When connecting to a malicious server,
    it could cause an arbitrary amount of memory to be
    allocated. This could have led to symptoms including
    a MemoryError, swapping, out of memory (OOM) killed
    processes or containers, or even system crashes
    (bsc#1254400, CVE-2025-13836).
  - gh-119452: Fix a potential memory denial of service in the
    http.server module. When a malicious user is connected to
    the CGI server on Windows, it could cause an arbitrary
    amount of memory to be allocated. This could have led to
    symptoms including a MemoryError, swapping, out of memory
    (OOM) killed processes or containers, or even system
    crashes.
- Library
  - gh-140797: Revert changes to the undocumented re.Scanner
    class. Capturing groups are still allowed for backward
    compatibility, although using them can lead to incorrect
    result. They will be forbidden in future Python versions.
  - gh-142206: The resource tracker in the multiprocessing
    module now uses the original communication protocol, as in
    Python 3.14.0 and below, by default. This avoids issues
    with upgrading Python while it is running. (Note that such
    ‘in-place’ upgrades are not tested.) The tracker remains
    compatible with subprocesses that use new protocol (that
    is, subprocesses using Python 3.13.10, 3.14.1 and 3.15).
- Core and Builtins
  - gh-142218: Fix crash when inserting into a split table
    dictionary with a non str key that matches an existing key.
- Update to 3.13.10:
- Tools/Demos
  - gh-141442: The iOS testbed now correctly handles test
    arguments that contain spaces.
- Tests
  - gh-140482: Preserve and restore the state of stty echo as
    part of the test environment.
  - gh-140082: Update python -m test to set FORCE_COLOR=1 when
    being run with color enabled so that unittest which is run
    by it with redirected output will output in color.
  - gh-136442: Use exitcode 1 instead of 5 if
    unittest.TestCase.setUpClass() raises an exception
- Security
  - gh-139700: Check consistency of the zip64 end of central
    directory record. Support records with “zip64 extensible
    data” if there are no bytes prepended to the ZIP file.
    (CVE-2025-8291, bsc#1251305)
  - gh-137836: Add support of the “plaintext” element, RAWTEXT
    elements “xmp”, “iframe”, “noembed” and “noframes”, and
    optionally RAWTEXT element “noscript” in
    html.parser.HTMLParser.
  - gh-136063: email.message: ensure linear complexity for
    legacy HTTP parameters parsing. Patch by Bénédikt Tran.
  - gh-136065: Fix quadratic complexity in
    os.path.expandvars() (CVE-2025-6075, bsc#1252974).
  - gh-119342: Fix a potential memory denial of service in the
    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 MemoryError, swapping, out of memory (OOM)
    killed processes or containers, or even system crashes
    (CVE-2025-13837, bsc#1254401).
- Library
  - gh-74389: When the stdin being used by a subprocess.Popen
    instance is closed, this is now ignored in
    subprocess.Popen.communicate() instead of leaving the class
    in an inconsistent state.
  - gh-87512: Fix subprocess.Popen.communicate() timeout
    handling on Windows when writing large input. Previously,
    the timeout was ignored during stdin writing, causing the
    method to block indefinitely if the child process did not
    consume input quickly. The stdin write is now performed in
    a background thread, allowing the timeout to be properly
    enforced.
  - gh-141473: When subprocess.Popen.communicate() was called
    with input and a timeout and is called for a second time
    after a TimeoutExpired exception before the process has
    died, it should no longer hang.
  - gh-59000: Fix pdb breakpoint resolution for class methods
    when the module defining the class is not imported.
  - gh-141570: Support file-like object raising OSError from
    fileno() in color detection (_colorize.can_colorize()).
    This can occur when sys.stdout is redirected.
  - gh-141659: Fix bad file descriptor errors from
    _posixsubprocess on AIX.
  - gh-141497: ipaddress: ensure that the methods
    IPv4Network.hosts() and IPv6Network.hosts() always return
    an iterator.
  - gh-140938: The statistics.stdev() and statistics.pstdev()
    functions now raise a ValueError when the input contains an
    infinity or a NaN.
  - gh-124111: Updated Tcl threading configuration in _tkinter
    to assume that threads are always available in Tcl 9 and
    later.
  - gh-137109: The os.fork and related forking APIs will no
    longer warn in the common case where Linux or macOS
    platform APIs return the number of threads in a process and
    find the answer to be 1 even when a os.register_at_fork()
    after_in_parent= callback (re)starts a thread.
  - gh-141314: Fix assertion failure in io.TextIOWrapper.tell()
    when reading files with standalone carriage return (\r)
    line endings.
  - gh-141311: Fix assertion failure in io.BytesIO.readinto()
    and undefined behavior arising when read position is above
    capcity in io.BytesIO.
  - gh-141141: Fix a thread safety issue with
    base64.b85decode(). Contributed by Benel Tayar.
  - gh-140911: collections: Ensure that the methods
    UserString.rindex() and UserString.index() accept
    collections.UserString instances as the sub argument.
  - gh-140797: The undocumented re.Scanner class now forbids
    regular expressions containing capturing groups in its
    lexicon patterns. Patterns using capturing groups could
    previously lead to crashes with segmentation fault. Use
    non-capturing groups (?:…) instead.
  - gh-140815: faulthandler now detects if a frame or a code
    object is invalid or freed. Patch by Victor Stinner.
  - gh-100218: Correctly set errno when socket.if_nametoindex()
    or socket.if_indextoname() raise an OSError. Patch by
    Bénédikt Tran.
  - gh-140875: Fix handling of unclosed character references
    (named and numerical) followed by the end of file in
    html.parser.HTMLParser with convert_charrefs=False.
  - gh-140734: multiprocessing: fix off-by-one error when
    checking the length of a temporary socket file path. Patch
    by Bénédikt Tran.
  - gh-140874: Bump the version of pip bundled in ensurepip to
    version 25.3
  - gh-140691: In urllib.request, when opening a FTP URL fails
    because a data connection cannot be made, the control
    connection’s socket is now closed to avoid
    a ResourceWarning.
  - gh-103847: Fix hang when cancelling process created by
    asyncio.create_subprocess_exec() or
    asyncio.create_subprocess_shell(). Patch by Kumar Aditya.
  - gh-140590: Fix arguments checking for the
    functools.partial.__setstate__() that may lead to internal
    state corruption and crash. Patch by Sergey Miryanov.
  - gh-140634: Fix a reference counting bug in
    os.sched_param.__reduce__().
  - gh-140633: Ignore AttributeError when setting a module’s
    __file__ attribute when loading an extension module
    packaged as Apple Framework.
  - gh-140593: xml.parsers.expat: Fix a memory leak that could
    affect users with ElementDeclHandler() set to a custom
    element declaration handler. Patch by Sebastian Pipping.
  - gh-140607: Inside io.RawIOBase.read(), validate that the
    count of bytes returned by io.RawIOBase.readinto() is valid
    (inside the provided buffer).
  - gh-138162: Fix logging.LoggerAdapter with merge_extra=True
    and without the extra argument.
  - gh-140474: Fix memory leak in array.array when creating
    arrays from an empty str and the u type code.
  - gh-140272: Fix memory leak in the clear() method of the
    dbm.gnu database.
  - gh-140041: Fix import of ctypes on Android and Cygwin when
    ABI flags are present.
  - gh-139905: Add suggestion to error message for
    typing.Generic subclasses when cls.__parameters__ is
    missing due to a parent class failing to call
    super().__init_subclass__() in its __init_subclass__.
  - gh-139845: Fix to not print KeyboardInterrupt twice in
    default asyncio REPL.
  - gh-139783: Fix inspect.getsourcelines() for the case when
    a decorator is followed by a comment or an empty line.
  - gh-70765: http.server: fix default handling of HTTP/0.9
    requests in BaseHTTPRequestHandler. Previously,
    BaseHTTPRequestHandler.parse_request() incorrectly waited
    for headers in the request although those are not supported
    in HTTP/0.9. Patch by Bénédikt Tran.
  - gh-139391: Fix an issue when, on non-Windows platforms, it
    was not possible to gracefully exit a python -m asyncio
    process suspended by Ctrl+Z and later resumed by fg other
    than with kill.
  - gh-101828: Fix 'shift_jisx0213', 'shift_jis_2004',
    'euc_jisx0213' and 'euc_jis_2004' codecs truncating null
    chars as they were treated as part of multi-character
    sequences.
  - gh-139246: fix: paste zero-width in default repl width is
    wrong.
  - gh-90949: Add SetAllocTrackerActivationThreshold() and
    SetAllocTrackerMaximumAmplification() to xmlparser objects
    to prevent use of disproportional amounts of dynamic memory
    from within an Expat parser. Patch by Bénédikt Tran.
  - gh-139065: Fix trailing space before a wrapped long word if
    the line length is exactly width in textwrap.
  - gh-138993: Dedent credits text.
  - gh-138859: Fix generic type parameterization raising
    a TypeError when omitting a ParamSpec that has a default
    which is not a list of types.
  - gh-138775: Use of python -m with base64 has been fixed to
    detect input from a terminal so that it properly notices
    EOF.
  - gh-98896: Fix a failure in multiprocessing resource_tracker
    when SharedMemory names contain colons. Patch by Rani
    Pinchuk.
  - gh-75989: tarfile.TarFile.extractall() and
    tarfile.TarFile.extract() now overwrite symlinks when
    extracting hardlinks. (Contributed by Alexander Enrique
    Urieles Nieto in gh-75989.)
  - gh-83424: Allows creating a ctypes.CDLL without name when
    passing a handle as an argument.
  - gh-136234: Fix asyncio.WriteTransport.writelines() to be
    robust to connection failure, by using the same behavior as
    write().
  - gh-136057: Fixed the bug in pdb and bdb where next and step
    can’t go over the line if a loop exists in the line.
  - gh-135307: email: Fix exception in set_content() when
    encoding text and max_line_length is set to 0 or None
    (unlimited).
  - gh-134453: Fixed subprocess.Popen.communicate() input=
    handling of memoryview instances that were non-byte shaped
    on POSIX platforms. Those are now properly cast to a byte
    shaped view instead of truncating the input. Windows
    platforms did not have this bug.
  - gh-102431: Clarify constraints for “logical” arguments in
    methods of decimal.Context.
- IDLE
  - gh-96491: Deduplicate version number in IDLE shell title
    bar after saving to a file.
- Documentation
  - gh-141994: xml.sax.handler: Make Documentation of
    xml.sax.handler.feature_external_ges warn of opening up to
    external entity attacks. Patch by Sebastian Pipping.
  - gh-140578: Remove outdated sencence in the documentation
    for multiprocessing, that implied that
    concurrent.futures.ThreadPoolExecutor did not exist.
- Core and Builtins
  - gh-142048: Fix quadratically increasing garbage collection
    delays in free-threaded build.
  - gh-141930: When importing a module, use Python’s regular
    file object to ensure that writes to .pyc files are
    complete or an appropriate error is raised.
  - gh-120158: Fix inconsistent state when enabling or
    disabling monitoring events too many times.
  - gh-141579: Fix sys.activate_stack_trampoline() to properly
    support the perf_jit backend. Patch by Pablo Galindo.
  - gh-141312: Fix the assertion failure in the __setstate__
    method of the range iterator when a non-integer argument is
    passed. Patch by Sergey Miryanov.
  - gh-140939: Fix memory leak when bytearray or bytes is
    formated with the
    %*b format with a large width that results in
    %a MemoryError.
  - gh-140530: Fix a reference leak when raise exc from cause
    fails. Patch by Bénédikt Tran.
  - gh-140576: Fixed crash in tokenize.generate_tokens() in
    case of specific incorrect input. Patch by Mikhail Efimov.
  - gh-140551: Fixed crash in dict if dict.clear() is called at
    the lookup stage. Patch by Mikhail Efimov and Inada Naoki.
  - gh-140471: Fix potential buffer overflow in ast.AST node
    initialization when encountering malformed _fields
    containing non-str.
  - gh-140406: Fix memory leak when an object’s __hash__()
    method returns an object that isn’t an int.
  - gh-140306: Fix memory leaks in cross-interpreter channel
    operations and shared namespace handling.
  - gh-140301: Fix memory leak of PyConfig in subinterpreters.
  - gh-140000: Fix potential memory leak when a reference cycle
    exists between an instance of typing.TypeAliasType,
    typing.TypeVar, typing.ParamSpec, or typing.TypeVarTuple
    and its __name__ attribute. Patch by Mikhail Efimov.
  - gh-139748: Fix reference leaks in error branches of
    functions accepting path strings or bytes such as compile()
    and os.system(). Patch by Bénédikt Tran.
  - gh-139516: Fix lambda colon erroneously start format spec
    in f-string in tokenizer.
  - gh-139640: Fix swallowing some syntax warnings in different
    modules if they accidentally have the same message and are
    emitted from the same line. Fix duplicated warnings in the
    finally block.
  - gh-137400: Fix a crash in the free threading build when
    disabling profiling or tracing across all threads with
    PyEval_SetProfileAllThreads() or
    PyEval_SetTraceAllThreads() or their Python equivalents
    threading.settrace_all_threads() and
    threading.setprofile_all_threads().
  - gh-133400: Fixed Ctrl+D (^D) behavior in _pyrepl module to
    match old pre-3.13 REPL behavior.
- C API
  - gh-140042: Removed the sqlite3_shutdown call that could
    cause closing connections for sqlite when used with
    multiple sub interpreters.
  - gh-140487: Fix Py_RETURN_NOTIMPLEMENTED in limited C API
    3.11 and older: don’t treat Py_NotImplemented as immortal.
    Patch by Victor Stinner.
- Remove upstreamed patches:
  - CVE-2025-13836-http-resp-cont-len.patch
  - CVE-2025-8291-consistency-zip64.patch
  - CVE-2025-6075-expandvars-perf-degrad.patch
* Wed Nov 19 2025 mcepl@suse.com
- Add pass-test_write_read_limited_history.patch:
  Fix readline history truncation when length is reduced
  The `readline.set_history_length()` function did not previously
  truncate the in-memory history when the new length was set to
  a value smaller than the current number of history items. This
  could lead to unexpected behavior where `get_history_length()`
  would still report the old length and writing the history to a
  file would write more entries than the new limit.
  This patch modifies `set_history_length()` to explicitly
  remove the oldest history entries using `remove_history()`
  when the length is decreased, ensuring the in-memory history
  is correctly truncated to the new limit. This brings the
  function's behavior in line with expectations and fixes
  failures in `test_write_read_limited_history`.
* Thu Nov 13 2025 mcepl@cepl.eu
- Add CVE-2025-6075-expandvars-perf-degrad.patch avoid simple
  quadratic complexity vulnerabilities of os.path.expandvars()
  (CVE-2025-6075, bsc#1252974).
* Tue Nov 04 2025 mcepl@cepl.eu
- Add CVE-2025-8291-consistency-zip64.patch which checks
  consistency of the zip64 end of central directory record, and
  preventing obfuscation of the payload, i.e., you scanning for
  malicious content in a ZIP file with one ZIP parser (let's say
  a Rust one) then unpack it in production with another (e.g.,
  the Python one) and get malicious content that the other parser
  did not see (CVE-2025-8291, bsc#1251305)
- Readjust patches while synchronizing between openSUSE and SLE trees:
  - F00251-change-user-install-location.patch
  - doc-py38-to-py36.patch
  - gh126985-mv-pyvenv.cfg2getpath.patch
* Wed Oct 15 2025 daniel.garcia@suse.com
- Update to 3.13.9:
  - Library
  - gh-139783: Fix inspect.getsourcelines() for the case when a
    decorator is followed by a comment or an empty line.
- Update to 3.13.8:
  - macOS
  - gh-124111: Update macOS installer to use Tcl/Tk 8.6.17.
  - gh-139573: Updated bundled version of OpenSSL to 3.0.18.
  - Windows
  - gh-139573: Updated bundled version of OpenSSL to 3.0.18.
  - gh-138896: Fix error installing C runtime on non-updated Windows
    machines
  - Tools/Demos
  - gh-139330: SBOM generation tool didn’t cross-check the version
    and checksum values against the Modules/expat/refresh.sh script,
    leading to the values becoming out-of-date during routine
    updates.
  - gh-137873: The iOS test runner has been simplified, resolving
    some issues that have been observed using the runner in GitHub
    Actions and Azure Pipelines test environments.
  - Tests
  - gh-139208: Fix regrtest --fast-ci --verbose: don’t ignore the
  - -verbose option anymore. Patch by Victor Stinner.
  - Security
  - gh-139400: xml.parsers.expat: Make sure that parent Expat
    parsers are only garbage-collected once they are no longer
    referenced by subparsers created by
    ExternalEntityParserCreate(). Patch by Sebastian Pipping.
  - gh-139283: sqlite3: correctly handle maximum number of rows to
    fetch in Cursor.fetchmany and reject negative values for
    Cursor.arraysize. Patch by Bénédikt Tran.
  - gh-135661: Fix CDATA section parsing in html.parser.HTMLParser
    according to the HTML5 standard: ] ]> and ]] > no longer end the
    CDATA section. Add private method _set_support_cdata() which can
    be used to specify how to parse <[CDATA[ — as a CDATA section in
    foreign content (SVG or MathML) or as a bogus comment in the
    HTML namespace.
  - Library
  - gh-139312: Upgrade bundled libexpat to 2.7.3
  - gh-139289: Do a real lazy-import on rlcompleter in pdb and
    restore the existing completer after importing rlcompleter.
  - gh-139210: Fix use-after-free when reporting unknown event in
    xml.etree.ElementTree.iterparse(). Patch by Ken Jin.
  - gh-138860: Lazy import rlcompleter in pdb to avoid deadlock in
    subprocess.
  - gh-112729: Fix crash when calling _interpreters.create when the
    process is out of memory.
  - gh-139076: Fix a bug in the pydoc module that was hiding
    functions in a Python module if they were implemented in an
    extension module and the module did not have __all__.
  - gh-138998: Update bundled libexpat to 2.7.2
  - gh-130567: Fix possible crash in locale.strxfrm() due to a
    platform bug on macOS.
  - gh-138779: Support device numbers larger than 2**63-1 for the
    st_rdev field of the os.stat_result structure.
  - gh-128636: Fix crash in PyREPL when os.environ is overwritten
    with an invalid value for mac
  - gh-88375: Fix normalization of the robots.txt rules and URLs in
    the urllib.robotparser module. No longer ignore trailing ?.
    Distinguish raw special characters ?, = and & from the
    percent-encoded ones.
  - gh-138515: email is added to Emscripten build.
  - gh-111788: Fix parsing errors in the urllib.robotparser module.
    Don’t fail trying to parse weird paths. Don’t fail trying to
    decode non-UTF-8 robots.txt files.
  - gh-138432: zoneinfo.reset_tzpath() will now convert any
    os.PathLike objects it receives into strings before adding them
    to TZPATH. It will raise TypeError if anything other than a
    string is found after this conversion. If given an os.PathLike
    object that represents a relative path, it will now raise
    ValueError instead of TypeError, and present a more informative
    error message.
  - gh-138008: Fix segmentation faults in the ctypes module due to
    invalid argtypes. Patch by Dung Nguyen.
  - gh-60462: Fix locale.strxfrm() on Solaris (and possibly other
    platforms).
  - gh-138204: Forbid expansion of shared anonymous memory maps on
    Linux, which caused a bus error.
  - gh-138010: Fix an issue where defining a class with a
    @warnings.deprecated-decorated base class may not invoke the
    correct __init_subclass__() method in cases involving multiple
    inheritance. Patch by Brian Schubert.
  - gh-138133: Prevent infinite traceback loop when sending CTRL^C
    to Python through strace.
  - gh-134869: Fix an issue where pressing Ctrl+C during tab
    completion in the REPL would leave the autocompletion menu in a
    corrupted state.
  - gh-137317: inspect.signature() now correctly handles classes
    that use a descriptor on a wrapped __init__() or __new__()
    method. Contributed by Yongyu Yan.
  - gh-137754: Fix import of the zoneinfo module if the C
    implementation of the datetime module is not available.
  - gh-137490: Handle ECANCELED in the same way as EINTR in
    signal.sigwaitinfo() on NetBSD.
  - gh-137477: Fix inspect.getblock(), inspect.getsourcelines() and
    inspect.getsource() for generator expressions.
  - gh-137017: Fix threading.Thread.is_alive to remain True until
    the underlying OS thread is fully cleaned up. This avoids false
    negatives in edge cases involving thread monitoring or premature
    threading.Thread.is_alive calls.
  - gh-136134: SMTP.auth_cram_md5() now raises an SMTPException
    instead of a ValueError if Python has been built without MD5
    support. In particular, SMTP clients will not attempt to use
    this method even if the remote server is assumed to support it.
    Patch by Bénédikt Tran.
  - gh-136134: IMAP4.login_cram_md5 now raises an IMAP4.error if
    CRAM-MD5 authentication is not supported. Patch by Bénédikt
    Tran.
  - gh-135386: Fix opening a dbm.sqlite3 database for reading from
    read-only file or directory.
  - gh-126631: Fix multiprocessing forkserver bug which prevented
    __main__ from being preloaded.
  - gh-123085: In a bare call to importlib.resources.files(), ensure
    the caller’s frame is properly detected when importlib.resources
    is itself available as a compiled module only (no source).
  - gh-118981: Fix potential hang in
    multiprocessing.popen_spawn_posix that can happen when the child
    proc dies early by closing the child fds right away.
  - gh-78319: UTF8 support for the IMAP APPEND command has been made
    RFC compliant.
  - bpo-38735: Fix failure when importing a module from the root
    directory on unix-like platforms with sys.pycache_prefix set.
  - bpo-41839: Allow negative priority values from
    os.sched_get_priority_min() and os.sched_get_priority_max()
    functions.
  - Core and Builtins
  - gh-134466: Don’t run PyREPL in a degraded environment where
    setting termios attributes is not allowed.
  - gh-71810: Raise OverflowError for (-1).to_bytes() for signed
    conversions when bytes count is zero. Patch by Sergey B
    Kirpichev.
  - gh-105487: Remove non-existent __copy__(), __deepcopy__(), and
    __bases__ from the __dir__() entries of types.GenericAlias.
  - gh-134163: Fix a hang when the process is out of memory inside
    an exception handler.
  - gh-138479: Fix a crash when a generic object’s __typing_subst__
    returns an object that isn’t a tuple.
  - gh-137576: Fix for incorrect source code being shown in
    tracebacks from the Basic REPL when PYTHONSTARTUP is given.
    Patch by Adam Hartz.
  - gh-132744: Certain calls now check for runaway recursion and
    respect the system recursion limit.
  - C API
  - gh-87135: Attempting to acquire the GIL after runtime
    finalization has begun in a different thread now causes the
    thread to hang rather than terminate, which avoids potential
    crashes or memory corruption caused by attempting to terminate a
    thread that is running code not specifically designed to support
    termination. In most cases this hanging is harmless since the
    process will soon exit anyway.
    While not officially marked deprecated until 3.14,
    PyThread_exit_thread is no longer called internally and remains
    solely for interface compatibility. Its behavior is inconsistent
    across platforms, and it can only be used safely in the unlikely
    case that every function in the entire call stack has been
    designed to support the platform-dependent termination
    mechanism. It is recommended that users of this function change
    their design to not require thread termination. In the unlikely
    case that thread termination is needed and can be done safely,
    users may migrate to calling platform-specific APIs such as
    pthread_exit (POSIX) or _endthreadex (Windows) directly.
  - Build
  - gh-135734: Python can correctly be configured and built with
    ./configure --enable-optimizations --disable-test-modules.
    Previously, the profile data generation step failed due to PGO
    tests where immortalization couldn’t be properly suppressed.
    Patch by Bénédikt Tran.
* Mon Sep 29 2025 daniel.garcia@suse.com
- Add gh139257-Support-docutils-0.22.patch to fix build with latest
  docutils (>=0.22) gh#python/cpython#139257
* Mon Sep 22 2025 dimstar@opensuse.org
- Drop AppStream: this results in a different cycle than
  appstream-glib. As the appdata.xml is controlled by ourselves, we
  can get away with just manually validating it when changing it.
* Thu Sep 18 2025 dimstar@opensuse.org
- Require AppStream to validate appdata file instead of deprecated
  appstream-glib.
- Update idle3.appdata.xml to pass the more pedantic appstreamcli.
* Tue Sep 09 2025 daniel.garcia@suse.com
- Add gh138131-exclude-pycache-from-digest.patch fixing reproducible
  build for python-nogil.
  (bsc#1244680, gh#python/cpython#138131)
* Fri Aug 15 2025 mcepl@cepl.eu
- Update to 3.13.7:
  - gh-137583: Fix a deadlock introduced in 3.13.6 when a call
    to ssl.SSLSocket.recv was blocked in one thread, and then
    another method on the object (such as ssl.SSLSocket.send) was
    subsequently called in another thread.
  - gh-137044: Return large limit values as positive integers
    instead of negative integers in resource.getrlimit().
    Accept large values and reject negative values (except
    RLIM_INFINITY) for limits in resource.setrlimit().
  - gh-136914: Fix retrieval of doctest.DocTest.lineno
    for objects decorated with functools.cache() or
    functools.cached_property.
  - gh-131788: Make ResourceTracker.send from multiprocessing
    re-entrant safe
  - gh-136155: We are now checking for fatal errors in EPUB
    builds in CI.
  - gh-137400: Fix a crash in the free threading build when
    disabling profiling or tracing across all threads with
    PyEval_SetProfileAllThreads() or PyEval_SetTraceAllThreads()
    or their Python equivalents threading.settrace_all_threads()
    and threading.setprofile_all_threads().
- Remove upstreamed patch:
  - gh137583-only-lock-SSL-context.patch