157 Commits

Author SHA256 Message Date
b020ec1b9b chore: remove files which should be deleted, but they were not 2025-11-23 02:32:31 +01:00
6807e0fac4 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`.
2025-11-20 23:05:53 +01:00
a8f3f2707f Add CVE-2025-6075-expandvars-perf-degrad.patch avoid simple
quadratic complexity vulnerabilities of os.path.expandvars()
(CVE-2025-6075, bsc#1252974).
2025-11-20 23:05:53 +01:00
02c7c3ac57 Add CVE-2025-8291-consistency-zip64.patch
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
2025-11-20 23:05:53 +01:00
1b4b152007 Merge remote-tracking branch 'suse/slfo-1.2' into factory 2025-11-20 22:58:40 +01:00
6823a127f7 Merge branch 'main' into main_3139 2025-11-04 17:40:24 +01:00
8490c35b5e Accepting request 1311758 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1311758
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=33
2025-10-17 15:25:33 +00:00
216aee44d2 Accepting request 1311480 from home:dgarcia:branches:devel:languages:python:Factory
- 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

OBS-URL: https://build.opensuse.org/request/show/1311480
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=128
2025-10-16 16:27:11 +00:00
5c7e077e05 Accepting request 1307951 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1307951
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=32
2025-10-01 16:55:40 +00:00
6ccfd57cb6 Accepting request 1307678 from home:dgarcia:branches:devel:languages:python:Factory
- Add gh139257-Support-docutils-0.22.patch to fix build with latest
  docutils (>=0.22) gh#python/cpython#139257

OBS-URL: https://build.opensuse.org/request/show/1307678
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=126
2025-09-29 16:57:25 +00:00
f26b5dd668 Accepting request 1306530 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1306530
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=31
2025-09-23 14:05:25 +00:00
97f2e50954 Accepting request 1306454 from home:dimstar:Factory
- 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.

OBS-URL: https://build.opensuse.org/request/show/1306454
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=124
2025-09-22 12:45:38 +00:00
d782ad00ca - Require AppStream to validate appdata file instead of deprecated
appstream-glib.
- Update idle3.appdata.xml to pass the more pedantic appstreamcli.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=123
2025-09-18 14:05:23 +00:00
b40f1d6405 Accepting request 1304230 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1304230
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=30
2025-09-14 16:49:35 +00:00
45ae9e0091 Accepting request 1303343 from home:dgarcia:branches:devel:languages:python:Factory
- Add gh138131-exclude-pycache-from-digest.patch fixing reproducible
  build for python-nogil.
  (bsc#1244680, gh#python/cpython#138131)

OBS-URL: https://build.opensuse.org/request/show/1303343
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=121
2025-09-12 07:39:47 +00:00
0f5697e310 Accepting request 1299833 from devel:languages:python:Factory
- 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

- Add gh137583-only-lock-SSL-context.patch fixing the
  regression in 3.13.6 by breaking non-blocking TLS connections
  (gh#python/cpython#137583).

- Update to 3.13.6:
  - Security

OBS-URL: https://build.opensuse.org/request/show/1299833
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=29
2025-08-21 14:47:12 +00:00
f819c56b57 - 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

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=119
2025-08-15 12:33:36 +00:00
6ca12749fe Accepting request 1299154 from home:mcepl:branches:devel:languages:python:Factory
REfresh the patch

OBS-URL: https://build.opensuse.org/request/show/1299154
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=118
2025-08-12 22:07:14 +00:00
af83d0ea02 - Add gh137583-only-lock-SSL-context.patch fixing the
regression in 3.13.6 by breaking non-blocking TLS connections
  (gh#python/cpython#137583).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=117
2025-08-12 09:37:56 +00:00
588cd5ec7f declarations are automatically closed, tags are ignored
(CVE-2025-6069, bsc#1244705).
- Remove upstreamed patches:
  - CVE-2025-8194-tarfile-no-neg-offsets.patch
  - CVE-2025-6069-quad-complex-HTMLParser.patch

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=116
2025-08-07 10:56:04 +00:00
4a974dadae - Update to 3.13.6:
Python 3.13.6 final
Release date: 2025-08-06
  - Tools/Demos
    - gh-135968: Stubs for strip are now provided as part of an
      iOS install.
  - Tests
    - gh-135966: The iOS testbed now handles the app_packages
      folder as a site directory.
    - gh-135494: Fix regrtest to support excluding tests from
      --pgo tests. Patch by Victor Stinner.
    - gh-135489: Show verbose output for failing tests during PGO
      profiling step with –enable-optimizations.
  - Security
    - gh-135661: Fix parsing start and end tags in
      html.parser.HTMLParser according to the HTML5 standard.
        - Whitespaces no longer accepted between </ and the tag
          name. E.g. </ script> does not end the script section.
        - Vertical tabulation (\v) and non-ASCII whitespaces no
          longer recognized as whitespaces. The only whitespaces
          are \t\n\r\f and space.
        - Null character (U+0000) no longer ends the tag name.
        - Attributes and slashes after the tag name in end tags
          are now ignored, instead of terminating after the first
          > in quoted attribute value. E.g. </script/foo=">"/>.
        - Multiple slashes and whitespaces between the last
          attribute and closing > are now ignored in both start
          and end tags. E.g. <a foo=bar/ //>.
        - Multiple = between attribute name and value are no
          longer collapsed. E.g. <a foo==bar> produces attribute

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=115
2025-08-07 10:16:41 +00:00
9a64481749 Accepting request 1297126 from devel:languages:python:Factory
- Add CVE-2025-8194-tarfile-no-neg-offsets.patch which now
  validates archives to ensure member offsets are non-negative
  (gh#python/cpython#130577, CVE-2025-8194, bsc#1247249).

OBS-URL: https://build.opensuse.org/request/show/1297126
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=28
2025-08-04 13:22:18 +00:00
c0f5d18c1e - Add CVE-2025-8194-tarfile-no-neg-offsets.patch which now
validates archives to ensure member offsets are non-negative
  (gh#python/cpython#130577, CVE-2025-8194, bsc#1247249).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=113
2025-08-01 20:14:12 +00:00
0c1f23a3d6 - Add CVE-2025-8194-tarfile-no-neg-offsets.patch which now
validates archives to ensure member offsets are non-negative
  (gh#python/cpython#130577, CVE-2025-8194, bsc#1247249).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=113
2025-08-01 20:14:12 +00:00
00d0af4ebb Accepting request 1294512 from devel:languages:python:Factory
DEPENDS ON SR#1294511, THEY HAVE TO GO TOGETHER!!!

- Fix gil/nogil package description, bsc#1246229

OBS-URL: https://build.opensuse.org/request/show/1294512
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=27
2025-07-20 13:28:48 +00:00
f1f4736355 - Fix gil/nogil package description, bsc#1246229
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=111
2025-07-10 10:18:09 +00:00
8fc89fce82 - Fix gil/nogil package description, bsc#1246229
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=111
2025-07-10 10:18:09 +00:00
e51fa4e692 - Add CVE-2025-6069-quad-complex-HTMLParser.patch to avoid worst
case quadratic complexity when processing certain crafted
  malformed inputs with HTMLParser (CVE-2025-6069, bsc#1244705).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=110
2025-07-02 14:51:36 +00:00
5584dde572 - Add CVE-2025-6069-quad-complex-HTMLParser.patch to avoid worst
case quadratic complexity when processing certain crafted
  malformed inputs with HTMLParser (CVE-2025-6069, bsc#1244705).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=110
2025-07-02 14:51:36 +00:00
da11e6e10a - Add bsc1243155-sphinx-non-determinism.patch (bsc#1243155) to
generate ids for audit_events using docname (reproducible
  builds).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=109
2025-07-02 13:52:43 +00:00
b30cd19ff8 - Add bsc1243155-sphinx-non-determinism.patch (bsc#1243155) to
generate ids for audit_events using docname (reproducible
  builds).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=109
2025-07-02 13:52:43 +00:00
a7efa91dcd - Use one core to build doc. This will make sphinx doc build
reproducible.
  bsc#1243155

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=108
2025-07-02 11:27:27 +00:00
cb554c7d4c Accepting request 1289841 from home:dgarcia:branches:devel:languages:python:Factory
- Use one core to build doc. This will make sphinx doc build
  reproducible.
  bsc#1243155

OBS-URL: https://build.opensuse.org/request/show/1289841
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=108
2025-07-02 11:27:27 +00:00
92106b1aea Accepting request 1288597 from devel:languages:python:Factory
CVE-2025-4517 (bsc#1244032). Also addresses CVE-2025-4435
      (gh#135034, bsc#1244061).

OBS-URL: https://build.opensuse.org/request/show/1288597
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=26
2025-06-26 09:38:02 +00:00
b58f975be7 Add link to bsc#1244061 to changelog.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=106
2025-06-25 19:43:42 +00:00
cf3b0e517c Add link to bsc#1244061 to changelog.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=106
2025-06-25 19:43:42 +00:00
f3df88065e Accepting request 1287762 from devel:languages:python:Factory
SHOULD GO BACK TO openSUSE:Factory:Staging:O

- adjusted sofilename for "nogil" build correctly.
- Update to 3.13.5:
  - Tests
    - gh-135120: Add test.support.subTests().
  - Library
    - gh-133967: Do not normalize locale name ‘C.UTF-8’ to
      ‘en_US.UTF-8’.
    - gh-135326: Restore support of integer-like objects with
      __index__() in random.getrandbits().
    - gh-135321: Raise a correct exception for values greater
      than 0x7fffffff for the BINSTRING opcode in the C
      implementation of pickle.
    - gh-135276: Backported bugfixes in zipfile.Path from
      zipp 3.23. Fixed .name, .stem and other basename-based
      properties on Windows when working with a zipfile on disk.
    - gh-134151: email: Fix TypeError in
      email.utils.decode_params() when sorting RFC 2231
      continuations that contain an unnumbered section.
    - gh-134152: email: Fix parsing of email message ID with
      invalid domain.
    - gh-127081: Fix libc thread safety issues with os by
      replacing getlogin with getlogin_r re-entrant version.
    - gh-131884: Fix formatting issues in json.dump() when both
      indent and skipkeys are used.
  - Core and Builtins
    - gh-135171: Roll back changes to generator and list
      comprehensions that went into 3.13.4 to fix gh-127682,
      but which involved semantic and bytecode changes not
      appropriate for a bugfix release.
  - C API
    - gh-134989: Fix Py_RETURN_NONE, Py_RETURN_TRUE and
      Py_RETURN_FALSE macros in the limited C API 3.11 and
      older: don’t treat Py_None, Py_True and Py_False as
      immortal. Patch by Victor Stinner.
    - gh-134989: Implement PyObject_DelAttr() and
      PyObject_DelAttrString() as macros in the limited C API
      3.12 and older. Patch by Victor Stinner.
- Substantially rewritten doc-py38-to-py36.patch patch to be more
  flexible and covering even unexpected changes.
- Update to 3.13.4:
  - Security
    - gh-135034: Fixes multiple issues that allowed tarfile
      extraction filters (filter="data" and filter="tar") to be
      bypassed using crafted symlinks and hard links.
      Addresses CVE-2024-12718 (bsc#1244056), CVE-2025-4138
      (bsc#1244059), CVE-2025-4330 (bsc#1244060), and
      CVE-2025-4517 (bsc#1244032).
    - gh-133767: Fix use-after-free in the “unicode-escape”
      decoder with a non-“strict” error handler (CVE-2025-4516,
      bsc#1243273).
    - gh-128840: Short-circuit the processing of long IPv6
      addresses early in ipaddress to prevent excessive memory
      consumption and a minor denial-of-service.
  - Library
    - gh-134718: ast.dump() now only omits None and [] values if
      they are default values.
    - gh-128840: Fix parsing long IPv6 addresses with embedded
      IPv4 address.
    - gh-134696: Built-in HACL* and OpenSSL implementations of
      hash function constructors now correctly accept the same
      documented named arguments. For instance, md5() could be
      previously invoked as md5(data=data) or md5(string=string)
      depending on the underlying implementation but these calls
      were not compatible. Patch by Bénédikt Tran.
    - gh-134210: curses.window.getch() now correctly handles
      signals. Patch by Bénédikt Tran.
    - gh-80334: multiprocessing.freeze_support() now checks for
      work on any “spawn” start method platform rather than only
      on Windows.
    - gh-114177: Fix asyncio to not close subprocess pipes which
      would otherwise error out when the event loop is already
      closed.
    - gh-134152: Fixed UnboundLocalError that could occur during
      email header parsing if an expected trailing delimiter is
      missing in some contexts.
    - gh-62184: Remove import of C implementation of io.FileIO
      from Python implementation which has its own implementation
    - gh-133982: Emit RuntimeWarning in the Python implementation
      of io when the file-like object is not closed explicitly in
      the presence of multiple I/O layers.
    - gh-133890: The tarfile module now handles
      UnicodeEncodeError in the same way as OSError when cannot
      extract a member.
    - gh-134097: Fix interaction of the new REPL and -X
      showrefcount command line option.
    - gh-133889: The generated directory listing page in
      http.server.SimpleHTTPRequestHandler now only shows the
      decoded path component of the requested URL, and not the
      query and fragment.
    - gh-134098: Fix handling paths that end with
      a percent-encoded slash (%2f or %2F) in
      http.server.SimpleHTTPRequestHandler.
    - gh-134062: ipaddress: fix collisions in __hash__() for
      IPv4Network and IPv6Network objects.
    - gh-133745: In 3.13.3 we accidentally changed the signature
      of the asyncio create_task() family of methods and how it
      calls a custom task factory in a backwards incompatible
      way. Since some 3rd party libraries have already made
      changes to work around the issue that might break if
      we simply reverted the changes, we’re instead changing
      things to be backwards compatible with 3.13.2 while still
      supporting those workarounds for 3.13.3. In particular, the
      special-casing of name and context is back (until 3.14) and
      consequently eager tasks may still find that their name
      hasn’t been set before they execute their first yielding
      await.
    - gh-71253: Raise ValueError in open() if opener returns a
      negative file-descriptor in the Python implementation of io
      to match the C implementation.
    - gh-77057: Fix handling of invalid markup declarations in
      html.parser.HTMLParser.
    - gh-133489: random.getrandbits() can now generate more that
      231 bits. random.randbytes() can now generate more that 256
      MiB.
    - gh-133290: Fix attribute caching issue when setting
      ctypes._Pointer._type_ in the undocumented and deprecated
      ctypes.SetPointerType() function and the undocumented
      set_type() method.
    - gh-132876: ldexp() on Windows doesn’t round subnormal
      results before Windows 11, but should. Python’s
      math.ldexp() wrapper now does round them, so results may
      change slightly, in rare cases of very small results, on
      Windows versions before 11.
    - gh-133089: Use original timeout value for
      subprocess.TimeoutExpired when the func subprocess.run()
      is called with a timeout instead of sometimes a confusing
      partial remaining time out value used internally on the
      final wait().
    - gh-133009: xml.etree.ElementTree: Fix a crash in
      Element.__deepcopy__ when the element is concurrently
      mutated. Patch by Bénédikt Tran.
    - gh-132995: Bump the version of pip bundled in ensurepip to
      version 25.1.1
    - gh-132017: Fix error when pyrepl is suspended, then resumed
      and terminated.
    - gh-132673: Fix a crash when using _align_ = 0 and _fields_
      = [] in a ctypes.Structure.
    - gh-132527: Include the valid typecode ‘w’ in the error
      message when an invalid typecode is passed to array.array.
    - gh-132439: Fix PyREPL on Windows: characters entered via
      AltGr are swallowed. Patch by Chris Eibl.
    - gh-132429: Fix support of Bluetooth sockets on NetBSD and
      DragonFly BSD.
    - gh-132106: QueueListener.start now raises a RuntimeError if
      the listener is already started.
    - gh-132417: Fix a NULL pointer dereference when a C function
      called using ctypes with restype py_object returns NULL.
    - gh-132385: Fix instance error suggestions trigger potential
      exceptions in object.__getattr__() in traceback.
    - gh-132308: A traceback.TracebackException now correctly
      renders the __context__ and __cause__ attributes from
      falsey Exception, and the exceptions attribute from falsey
      ExceptionGroup.
    - gh-132250: Fixed the SystemError in cProfile when locating
      the actual C function of a method raises an exception.
    - gh-132063: Prevent exceptions that evaluate as
      falsey (namely, when their __bool__ method returns
      False or their __len__ method returns 0) from being
      ignored by concurrent.futures.ProcessPoolExecutor and
      concurrent.futures.ThreadPoolExecutor.
    - gh-119605: Respect follow_wrapped for __init__() and
      __new__() methods when getting the class signature for a
      class with inspect.signature(). Preserve class signature
      after wrapping with warnings.deprecated(). Patch by Xuehai
      Pan.
    - gh-91555: Ignore log messages generated during handling of
      log messages, to avoid deadlock or infinite recursion.
    - gh-131434: Improve error reporting for incorrect format in
      time.strptime().
    - gh-131127: Systems using LibreSSL now successfully build.
    - gh-130999: Avoid exiting the new REPL and offer suggestions
      even if there are non-string candidates when errors occur.
    - gh-130941: Fix configparser.ConfigParser parsing empty
      interpolation with allow_no_value set to True.
    - gh-129098: Fix REPL traceback reporting when using
      compile() with an inexisting file. Patch by Bénédikt Tran.
    - gh-130631: http.cookiejar.join_header_words() is now more
      similar to the original Perl version. It now quotes the
      same set of characters and always quote values that end
      with "\n".
    - gh-129719: Fix missing socket.CAN_RAW_ERR_FILTER constant
      in the socket module on Linux systems. It was missing since
      Python 3.11.
    - gh-124096: Turn on virtual terminal mode and enable
      bracketed paste in REPL on Windows console. (If the
      terminal does not support bracketed paste, enabling it does
      nothing.)
    - gh-122559: Remove __reduce__() and __reduce_ex__() methods
      that always raise TypeError in the C implementation
      of io.FileIO, io.BufferedReader, io.BufferedWriter
      and io.BufferedRandom and replace them with default
      __getstate__() methods that raise TypeError. This restores
      fine details of behavior of Python 3.11 and older versions.
    - gh-122179: hashlib.file_digest() now raises BlockingIOError
      when no data is available during non-blocking I/O. Before,
      it added spurious null bytes to the digest.
    - gh-86155: html.parser.HTMLParser.close() no longer loses
      data when the <script> tag is not closed. Patch by Waylan
      Limberg.
    - gh-69426: Fix html.parser.HTMLParser to not unescape
      character entities in attribute values if they are followed
      by an ASCII alphanumeric or an equals sign.
    - bpo-44172: Keep a reference to original curses windows in
      subwindows so that the original window does not get deleted
      before subwindows.
  - Tests
    - gh-133744: Fix multiprocessing interrupt test. Add an event
      to synchronize the parent process with the child process:
      wait until the child process starts sleeping. Patch by
      Victor Stinner.
    - gh-133639: Fix
      TestPyReplAutoindent.test_auto_indent_default() doesn’t run
      input_code.
    - gh-133131: The iOS testbed will now select the most
      recently released “SE-class” device for testing if a device
      isn’t explicitly specified.
    - gh-109981: The test helper that counts the list of open
      file descriptors now uses the optimised /dev/fd approach on
      all Apple platforms, not just macOS. This avoids crashes
      caused by guarded file descriptors.
  - IDLE
    - gh-112936: fix IDLE: no Shell menu item in single-process
      mode.
  - Documentation
    - gh-107006: Move documentation and example code for
      threading.local from its docstring to the official docs.
  - Core and Builtins
    - gh-134908: Fix crash when iterating over lines in a text
      file on the free threaded build.
    - gh-127682: No longer call __iter__ twice in list
      comprehensions. This brings the behavior of list
      comprehensions in line with other forms of iteration
    - gh-134381: Fix RuntimeError when using a not-started
      threading.Thread after calling os.fork()
    - gh-128066: Fixes an edge case where PyREPL improperly threw
      an error when Python is invoked on a read only filesystem
      while trying to write history file entries.
    - gh-134100: Fix a use-after-free bug that occurs when an
      imported module isn’t in sys.modules after its initial
      import. Patch by Nico-Posada.
    - gh-133703: Fix hashtable in dict can be bigger than
      intended in some situations.
    - gh-132869: Fix crash in the free threading build when
      accessing an object attribute that may be concurrently
      inserted or deleted.
    - gh-132762: fromkeys() no longer loops forever when adding
      a small set of keys to a large base dict. Patch by Angela
      Liss.
    - gh-133543: Fix a possible memory leak that could occur when
      directly accessing instance dictionaries (__dict__) that
      later become part of a reference cycle.
    - gh-133516: Raise ValueError when constants True, False or
      None are used as an identifier after NFKC normalization.
    - gh-133441: Fix crash upon setting an attribute with a dict
      subclass. Patch by Victor Stinner.
    - gh-132942: Fix two races in the type lookup cache. This
      affected the free-threaded build and could cause crashes
      (apparently quite difficult to trigger).
    - gh-132713: Fix repr(list) race condition: hold a strong
      reference to the item while calling repr(item). Patch by
      Victor Stinner.
    - gh-132747: Fix a crash when calling __get__() of a method
      with a None second argument.
    - gh-132542: Update Thread.native_id after fork(2) to ensure
      accuracy. Patch by Noam Cohen.
    - gh-124476: Fix decoding from the locale encoding in the
      C.UTF-8 locale.
    - gh-131927: Compiler warnings originating from the same
      module and line number are now only emitted once, matching
      the behaviour of warnings emitted from user code. This can
      also be configured with warnings filters.
    - gh-127682: No longer call __iter__ twice when creating and
      executing a generator expression. Creating a generator
      expression from a non-interable will raise only when the
      generator expression is executed. This brings the behavior
      of generator expressions in line with other generators.
    - gh-131878: Handle uncaught exceptions in the main input
      loop for the new REPL.
    - gh-131878: Fix support of unicode characters with two or
      more codepoints on Windows in the new REPL.
    - gh-130804: Fix support of unicode characters on Windows in
      the new REPL.
    - gh-130070: Fixed an assertion error for exec() passed a
      string source and a non-None closure. Patch by Bartosz
      Sławecki.
    - gh-129958: Fix a bug that was allowing newlines
      inconsitently in format specifiers for single-quoted
      f-strings. Patch by Pablo Galindo.
  - C API
    - gh-132909: Fix an overflow when handling the K format in
      Py_BuildValue(). Patch by Bénédikt Tran.
- Remove upstreamed patches:
  - CVE-2025-4516-DecodeError-handler.patch
  - gh-132535-rsrc-warn-test_timeout.patch

OBS-URL: https://build.opensuse.org/request/show/1287762
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=25
2025-06-24 18:45:07 +00:00
c7e438c2e0 - Substantially rewritten doc-py38-to-py36.patch patch to be more
flexible and covering even unexpected changes.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=104
2025-06-22 19:29:14 +00:00
7d8817d9bb - Substantially rewritten doc-py38-to-py36.patch patch to be more
flexible and covering even unexpected changes.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=104
2025-06-22 19:29:14 +00:00
eb2298e3f2 - adjusted sofilename for "nogil" build correctly.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=103
2025-06-22 16:37:53 +00:00
308dfaef9b Accepting request 1287576 from home:msmeissn:branches:devel:languages:python:Factory
- adjusted sofilename for "nogil" build correctly.

OBS-URL: https://build.opensuse.org/request/show/1287576
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=103
2025-06-22 16:37:53 +00:00
f9c64528f8 - Update to 3.13.5:
- Tests
    - gh-135120: Add test.support.subTests().
  - Library
    - gh-133967: Do not normalize locale name ‘C.UTF-8’ to
      ‘en_US.UTF-8’.
    - gh-135326: Restore support of integer-like objects with
      __index__() in random.getrandbits().
    - gh-135321: Raise a correct exception for values greater
      than 0x7fffffff for the BINSTRING opcode in the C
      implementation of pickle.
    - gh-135276: Backported bugfixes in zipfile.Path from
      zipp 3.23. Fixed .name, .stem and other basename-based
      properties on Windows when working with a zipfile on disk.
    - gh-134151: email: Fix TypeError in
      email.utils.decode_params() when sorting RFC 2231
      continuations that contain an unnumbered section.
    - gh-134152: email: Fix parsing of email message ID with
      invalid domain.
    - gh-127081: Fix libc thread safety issues with os by
      replacing getlogin with getlogin_r re-entrant version.
    - gh-131884: Fix formatting issues in json.dump() when both
      indent and skipkeys are used.
  - Core and Builtins
    - gh-135171: Roll back changes to generator and list
      comprehensions that went into 3.13.4 to fix gh-127682,
      but which involved semantic and bytecode changes not
      appropriate for a bugfix release.
  - C API
    - gh-134989: Fix Py_RETURN_NONE, Py_RETURN_TRUE and

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=102
2025-06-11 22:06:33 +00:00
c2d30804e6 - Update to 3.13.5:
- Tests
    - gh-135120: Add test.support.subTests().
  - Library
    - gh-133967: Do not normalize locale name ‘C.UTF-8’ to
      ‘en_US.UTF-8’.
    - gh-135326: Restore support of integer-like objects with
      __index__() in random.getrandbits().
    - gh-135321: Raise a correct exception for values greater
      than 0x7fffffff for the BINSTRING opcode in the C
      implementation of pickle.
    - gh-135276: Backported bugfixes in zipfile.Path from
      zipp 3.23. Fixed .name, .stem and other basename-based
      properties on Windows when working with a zipfile on disk.
    - gh-134151: email: Fix TypeError in
      email.utils.decode_params() when sorting RFC 2231
      continuations that contain an unnumbered section.
    - gh-134152: email: Fix parsing of email message ID with
      invalid domain.
    - gh-127081: Fix libc thread safety issues with os by
      replacing getlogin with getlogin_r re-entrant version.
    - gh-131884: Fix formatting issues in json.dump() when both
      indent and skipkeys are used.
  - Core and Builtins
    - gh-135171: Roll back changes to generator and list
      comprehensions that went into 3.13.4 to fix gh-127682,
      but which involved semantic and bytecode changes not
      appropriate for a bugfix release.
  - C API
    - gh-134989: Fix Py_RETURN_NONE, Py_RETURN_TRUE and

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=102
2025-06-11 22:06:33 +00:00
3386fc12ed Add missing import
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=101
2025-06-10 01:23:49 +00:00
70558652fc Add missing import
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=101
2025-06-10 01:23:49 +00:00
e8c68d65d4 - Update to 3.13.4:
- Security
    - gh-135034: Fixes multiple issues that allowed tarfile
      extraction filters (filter="data" and filter="tar") to be
      bypassed using crafted symlinks and hard links.
      Addresses CVE-2024-12718 (bsc#1244056), CVE-2025-4138
      (bsc#1244059), CVE-2025-4330 (bsc#1244060), and
      CVE-2025-4517 (bsc#1244032).
    - gh-133767: Fix use-after-free in the “unicode-escape”
      decoder with a non-“strict” error handler (CVE-2025-4516,
      bsc#1243273).
    - gh-128840: Short-circuit the processing of long IPv6
      addresses early in ipaddress to prevent excessive memory
      consumption and a minor denial-of-service.
  - Library
    - gh-134718: ast.dump() now only omits None and [] values if
      they are default values.
    - gh-128840: Fix parsing long IPv6 addresses with embedded
      IPv4 address.
    - gh-134696: Built-in HACL* and OpenSSL implementations of
      hash function constructors now correctly accept the same
      documented named arguments. For instance, md5() could be
      previously invoked as md5(data=data) or md5(string=string)
      depending on the underlying implementation but these calls
      were not compatible. Patch by Bénédikt Tran.
    - gh-134210: curses.window.getch() now correctly handles
      signals. Patch by Bénédikt Tran.
    - gh-80334: multiprocessing.freeze_support() now checks for
      work on any “spawn” start method platform rather than only
      on Windows.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=100
2025-06-09 21:38:15 +00:00
6072bbdbcd - Update to 3.13.4:
- Security
    - gh-135034: Fixes multiple issues that allowed tarfile
      extraction filters (filter="data" and filter="tar") to be
      bypassed using crafted symlinks and hard links.
      Addresses CVE-2024-12718 (bsc#1244056), CVE-2025-4138
      (bsc#1244059), CVE-2025-4330 (bsc#1244060), and
      CVE-2025-4517 (bsc#1244032).
    - gh-133767: Fix use-after-free in the “unicode-escape”
      decoder with a non-“strict” error handler (CVE-2025-4516,
      bsc#1243273).
    - gh-128840: Short-circuit the processing of long IPv6
      addresses early in ipaddress to prevent excessive memory
      consumption and a minor denial-of-service.
  - Library
    - gh-134718: ast.dump() now only omits None and [] values if
      they are default values.
    - gh-128840: Fix parsing long IPv6 addresses with embedded
      IPv4 address.
    - gh-134696: Built-in HACL* and OpenSSL implementations of
      hash function constructors now correctly accept the same
      documented named arguments. For instance, md5() could be
      previously invoked as md5(data=data) or md5(string=string)
      depending on the underlying implementation but these calls
      were not compatible. Patch by Bénédikt Tran.
    - gh-134210: curses.window.getch() now correctly handles
      signals. Patch by Bénédikt Tran.
    - gh-80334: multiprocessing.freeze_support() now checks for
      work on any “spawn” start method platform rather than only
      on Windows.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=100
2025-06-09 21:38:15 +00:00
f5a88d357f Accepting request 1281135 from devel:languages:python:Factory
- Don't use %elif, it is supported only from rpm 4.15.0, which is
  not in SLE-15.

OBS-URL: https://build.opensuse.org/request/show/1281135
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=24
2025-06-01 19:36:01 +00:00
96acb778b3 - Don't use %elif, it is supported only from rpm 4.15.0, which is
not in SLE-15.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=98
2025-05-28 09:47:26 +00:00
6d5d3f96b0 - Don't use %elif, it is supported only from rpm 4.15.0, which is
not in SLE-15.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=98
2025-05-28 09:47:26 +00:00
820434f8e4 Accepting request 1278136 from devel:languages:python:Factory
- Add CVE-2025-4516-DecodeError-handler.patch fixing
  CVE-2025-4516 (bsc#1243273) blocking DecodeError handling
  vulnerability, which could lead to DoS.

OBS-URL: https://build.opensuse.org/request/show/1278136
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=23
2025-05-23 12:26:37 +00:00
8d20edb449 - Add CVE-2025-4516-DecodeError-handler.patch fixing
CVE-2025-4516 (bsc#1243273) blocking DecodeError handling
  vulnerability, which could lead to DoS.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=96
2025-05-17 07:34:05 +00:00
487ae82f04 - Add CVE-2025-4516-DecodeError-handler.patch fixing
CVE-2025-4516 (bsc#1243273) blocking DecodeError handling
  vulnerability, which could lead to DoS.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=96
2025-05-17 07:34:05 +00:00
55fb9cd905 Accepting request 1276664 from devel:languages:python:Factory
- Remove python-3.3.0b1-test-posix_fadvise.patch (not needed
  since kernel 3.6-rc1)

OBS-URL: https://build.opensuse.org/request/show/1276664
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=22
2025-05-13 18:05:26 +00:00
64bae1f84b - Remove python-3.3.0b1-test-posix_fadvise.patch (not needed
since kernel 3.6-rc1)

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=94
2025-05-10 11:43:36 +00:00
d8af743464 - Remove python-3.3.0b1-test-posix_fadvise.patch (not needed
since kernel 3.6-rc1)

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=94
2025-05-10 11:43:36 +00:00
c1d8c54913 Accepting request 1270150 from devel:languages:python:Factory
- Update to 3.13.3:
  - Tools/Demos
    - gh-131852: msgfmt no longer adds the POT-Creation-Date to
      generated .mo files for consistency with GNU msgfmt.
    - gh-85012: Correctly reset msgctxt when compiling messages
      in msgfmt.
    - gh-130025: The iOS testbed now correctly handles symlinks
      used as Python framework references.
  - Tests
    - gh-131050: test_ssl.test_dh_params is skipped if the
      underlying TLS library does not support finite-field
      ephemeral Diffie-Hellman.
    - gh-129200: Multiple iOS testbed runners can now be started
      at the same time without introducing an ambiguity over
      simulator ownership.
    - gh-130292: The iOS testbed will now run successfully on a
      machine that has not previously run Xcode tests (such as CI
      configurations).
    - gh-130293: The tests of terminal colorization are no longer
      sensitive to the value of the TERM variable in the testing
      environment.
    - gh-126332: Add unit tests for pyrepl.
  - Security
    - gh-131809: Update bundled libexpat to 2.7.1
    - gh-131261: Upgrade to libexpat 2.7.0
    - gh-127371: Avoid unbounded buffering for
      tempfile.SpooledTemporaryFile.writelines(). Previously,
      disk spillover was only checked after the lines iterator
      had been exhausted. This is now done after each line is
      written.

OBS-URL: https://build.opensuse.org/request/show/1270150
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=21
2025-04-25 20:17:50 +00:00
201e349852 This
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=92
2025-04-16 07:52:47 +00:00
bb17c93a2a This
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=92
2025-04-16 07:52:47 +00:00
a90f4e560b Fix patches
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=91
2025-04-16 07:17:38 +00:00
55167f91bd Fix patches
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=91
2025-04-16 07:17:38 +00:00
0f47302d79 - Add gh-126500-test_ssl-no-stop-ThreadedEchoServer-OSError.patch
and gh-127257-ssl-OSError-ERR_LIB_SYS.patch to make the
  interpreter compatible with OpenSSL 3.5 (bsc#1241067).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=90
2025-04-16 07:15:35 +00:00
b91bbdde1b - Add gh-126500-test_ssl-no-stop-ThreadedEchoServer-OSError.patch
and gh-127257-ssl-OSError-ERR_LIB_SYS.patch to make the
  interpreter compatible with OpenSSL 3.5 (bsc#1241067).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=90
2025-04-16 07:15:35 +00:00
24d06dc05c - Add gh-132535-rsrc-warn-test_timeout.patch to fix
failing tests in the build system without network access
  (gh#python/cpython#132535).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=89
2025-04-15 22:19:57 +00:00
384d0f4194 - Add gh-132535-rsrc-warn-test_timeout.patch to fix
failing tests in the build system without network access
  (gh#python/cpython#132535).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=89
2025-04-15 22:19:57 +00:00
3837884001 - Add gh126985-mv-pyvenv.cfg2getpath.patch to remove failing
tests in test_sysconfig.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=88
2025-04-15 14:09:42 +00:00
9e2287fa69 - Add gh126985-mv-pyvenv.cfg2getpath.patch to remove failing
tests in test_sysconfig.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=88
2025-04-15 14:09:42 +00:00
a23dbf9cdf - Update to 3.13.3:
- Tools/Demos
    - gh-131852: msgfmt no longer adds the POT-Creation-Date to
      generated .mo files for consistency with GNU msgfmt.
    - gh-85012: Correctly reset msgctxt when compiling messages
      in msgfmt.
    - gh-130025: The iOS testbed now correctly handles symlinks
      used as Python framework references.
  - Tests
    - gh-131050: test_ssl.test_dh_params is skipped if the
      underlying TLS library does not support finite-field
      ephemeral Diffie-Hellman.
    - gh-129200: Multiple iOS testbed runners can now be started
      at the same time without introducing an ambiguity over
      simulator ownership.
    - gh-130292: The iOS testbed will now run successfully on a
      machine that has not previously run Xcode tests (such as CI
      configurations).
    - gh-130293: The tests of terminal colorization are no longer
      sensitive to the value of the TERM variable in the testing
      environment.
    - gh-126332: Add unit tests for pyrepl.
  - Security
    - gh-131809: Update bundled libexpat to 2.7.1
    - gh-131261: Upgrade to libexpat 2.7.0
    - gh-127371: Avoid unbounded buffering for
      tempfile.SpooledTemporaryFile.writelines(). Previously,
      disk spillover was only checked after the lines iterator
      had been exhausted. This is now done after each line is
      written.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=87
2025-04-11 19:56:43 +00:00
9624a1ae7e - Update to 3.13.3:
- Tools/Demos
    - gh-131852: msgfmt no longer adds the POT-Creation-Date to
      generated .mo files for consistency with GNU msgfmt.
    - gh-85012: Correctly reset msgctxt when compiling messages
      in msgfmt.
    - gh-130025: The iOS testbed now correctly handles symlinks
      used as Python framework references.
  - Tests
    - gh-131050: test_ssl.test_dh_params is skipped if the
      underlying TLS library does not support finite-field
      ephemeral Diffie-Hellman.
    - gh-129200: Multiple iOS testbed runners can now be started
      at the same time without introducing an ambiguity over
      simulator ownership.
    - gh-130292: The iOS testbed will now run successfully on a
      machine that has not previously run Xcode tests (such as CI
      configurations).
    - gh-130293: The tests of terminal colorization are no longer
      sensitive to the value of the TERM variable in the testing
      environment.
    - gh-126332: Add unit tests for pyrepl.
  - Security
    - gh-131809: Update bundled libexpat to 2.7.1
    - gh-131261: Upgrade to libexpat 2.7.0
    - gh-127371: Avoid unbounded buffering for
      tempfile.SpooledTemporaryFile.writelines(). Previously,
      disk spillover was only checked after the lines iterator
      had been exhausted. This is now done after each line is
      written.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=87
2025-04-11 19:56:43 +00:00
208ac0bda6 revert
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=86
2025-04-11 06:10:15 +00:00
415df5f3cd Accepting request 1268534 from devel:languages:python:Factory
revert

OBS-URL: https://build.opensuse.org/request/show/1268534
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=86
2025-04-11 06:10:15 +00:00
88b70a09e9 - don't require rpm-build-python for base to fix bootstrap issue
after primary_python change
- replace rpm-build-python alias with python-rpm-packaging package name

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=85
2025-03-14 22:57:44 +00:00
3467717953 Accepting request 1253127 from devel:LoongArch:Factory
- don't require rpm-build-python for base to fix bootstrap issue
  after primary_python change
- replace rpm-build-python alias with python-rpm-packaging package name

OBS-URL: https://build.opensuse.org/request/show/1253127
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=85
2025-03-14 22:57:44 +00:00
1ea8708b8d Accepting request 1251953 from devel:languages:python:Factory
- Skip PGO with %want_reproducible_builds (bsc#1239210).

      over multiple lines in combination with unicode encoding
      (bsc#1238450 CVE-2025-1795)

OBS-URL: https://build.opensuse.org/request/show/1251953
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=20
2025-03-12 14:19:55 +00:00
3bce06d06a Fix bug reference in the changelog
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=83
2025-03-11 06:50:29 +00:00
1e079c98aa Fix bug reference in the changelog
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=82
2025-03-11 06:15:52 +00:00
347e286045 - Skip PGO with %want_reproducible_builds (boo#1040589)
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=81
2025-03-10 18:35:58 +00:00
279fe75cee Accepting request 1250305 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1250305
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=19
2025-03-06 13:47:53 +00:00
d6f4df3c91 Accepting request 1250070 from home:dgarcia:branches:devel:languages:python:Factory
- Do not build with experimental_jit when primary_python

OBS-URL: https://build.opensuse.org/request/show/1250070
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=79
2025-03-05 06:27:41 +00:00
7d140c532a Accepting request 1243939 from devel:languages:python:Factory
- Update to 3.13.2:
  - Tools/Demos
    - gh-128152: Fix a bug where Argument Clinic’s C
      pre-processor parser tried to parse pre-processor
      directives inside C comments. Patch by Erlend Aasland.
  - Tests
    - gh-127906: Test the limited C API in test_cppext. Patch by
      Victor Stinner.
    - gh-127637: Add tests for the dis command-line
      interface. Patch by Bénédikt Tran.
    - gh-126925: iOS test results are now streamed during test
      execution, and the deprecated xcresulttool is no longer
      used.
  - Security
    - gh-105704: When using urllib.parse.urlsplit() and
      urllib.parse.urlparse() host parsing would not reject
      domain names containing square brackets ([ and ]). Square
      brackets are only valid for IPv6 and IPvFuture hosts
      according to RFC 3986 Section 3.2.2. (CVE-2025-0938,
      bsc#1236705)
    - gh-127655: Fixed the
      asyncio.selector_events._SelectorSocketTransport
      transport not pausing writes for the protocol when
      the buffer reaches the high water mark when using
      asyncio.WriteTransport.writelines() (CVE-2024-12254,
      bsc#1234290).
    - gh-126108: Fix a possible NULL pointer dereference in
      PySys_AddWarnOptionUnicode().
    - gh-80222: Fix bug in the folding of quoted strings
      when flattening an email message using a modern email

OBS-URL: https://build.opensuse.org/request/show/1243939
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=18
2025-02-09 18:58:56 +00:00
875a6f6235 - Add doc-py38-to-py36.patch to make documentation buildable on
SLE with older Sphinx.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=77
2025-02-05 16:42:08 +00:00
c596c85ff5 - Update to 3.13.2:
- Tools/Demos
    - gh-128152: Fix a bug where Argument Clinic’s C
      pre-processor parser tried to parse pre-processor
      directives inside C comments. Patch by Erlend Aasland.
  - Tests
    - gh-127906: Test the limited C API in test_cppext. Patch by
      Victor Stinner.
    - gh-127637: Add tests for the dis command-line
      interface. Patch by Bénédikt Tran.
    - gh-126925: iOS test results are now streamed during test
      execution, and the deprecated xcresulttool is no longer
      used.
  - Security
    - gh-105704: When using urllib.parse.urlsplit() and
      urllib.parse.urlparse() host parsing would not reject
      domain names containing square brackets ([ and ]). Square
      brackets are only valid for IPv6 and IPvFuture hosts
      according to RFC 3986 Section 3.2.2. (CVE-2025-0938,
      bsc#1236705)
    - gh-127655: Fixed the
      asyncio.selector_events._SelectorSocketTransport
      transport not pausing writes for the protocol when
      the buffer reaches the high water mark when using
      asyncio.WriteTransport.writelines() (CVE-2024-12254,
      bsc#1234290).
    - gh-126108: Fix a possible NULL pointer dereference in
      PySys_AddWarnOptionUnicode().
    - gh-80222: Fix bug in the folding of quoted strings
      when flattening an email message using a modern email

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=76
2025-02-05 09:57:45 +00:00
5c3c7cecd2 Accepting request 1241509 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1241509
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=17
2025-02-03 20:40:34 +00:00
dfcfb5ce90 Accepting request 1240511 from home:dgarcia:branches:devel:languages:python:Factory
- Configure externally_managed with a bcond
  https://en.opensuse.org/openSUSE:Python:Externally_managed
  bsc#1228165

OBS-URL: https://build.opensuse.org/request/show/1240511
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=74
2025-01-30 17:35:22 +00:00
528339bd34 Accepting request 1228971 from devel:languages:python:Factory
- Add CVE-2024-12254-unbound-mem-buffering-SelectorSocketTransport.writelines.patch
  preventing exhaustion of memory (gh#python/cpython#127655,
  bsc#1234290, CVE-2024-12254).

- Update to 3.13.1:
  - Tools/Demos
    - gh-126807: Fix extraction warnings in pygettext.py caused
      by mistaking function definitions for function calls.
    - gh-126167: The iOS testbed was modified so that it can be
      used by third-party projects for testing purposes.
  - 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
    - gh-125140: Remove the current directory from sys.path when
      using PyREPL.
    - gh-122792: Changed IPv4-mapped ipaddress.IPv6Address to
      consistently use the mapped IPv4 address value for deciding
      properties. Properties which have their behavior fixed are
      is_multicast, is_reserved, is_link_local, is_global, and
      is_unspecified.
  - Library
    - gh-127321: pdb.set_trace() will not stop at an opcode that
      does not have an associated line number anymore.

OBS-URL: https://build.opensuse.org/request/show/1228971
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=16
2025-01-23 16:57:00 +00:00
d4f884437e - Add CVE-2024-12254-unbound-mem-buffering-SelectorSocketTransport.writelines.patch
preventing exhaustion of memory (gh#python/cpython#127655,
  bsc#1234290, CVE-2024-12254).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=72
2024-12-06 20:46:56 +00:00
ecf4d377f8 Update patches
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=71
2024-12-06 13:01:45 +00:00
d6003ec835 - Update to 3.13.1:
- Tools/Demos
    - gh-126807: Fix extraction warnings in pygettext.py caused
      by mistaking function definitions for function calls.
    - gh-126167: The iOS testbed was modified so that it can be
      used by third-party projects for testing purposes.
  - 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
    - gh-125140: Remove the current directory from sys.path when
      using PyREPL.
    - gh-122792: Changed IPv4-mapped ipaddress.IPv6Address to
      consistently use the mapped IPv4 address value for deciding
      properties. Properties which have their behavior fixed are
      is_multicast, is_reserved, is_link_local, is_global, and
      is_unspecified.
  - Library
    - gh-127321: pdb.set_trace() will not stop at an opcode that
      does not have an associated line number anymore.
    - 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

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=70
2024-12-04 22:01:51 +00:00
adc199414a Accepting request 1227320 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1227320
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=15
2024-11-30 12:27:29 +00:00
64423e0ba5 Accepting request 1227315 from home:dgarcia:branches:devel:languages:python:Factory
- Drop CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch, not needed
  anymore because libexpat is updated to 2.6 in SP7. bsc#1233777

OBS-URL: https://build.opensuse.org/request/show/1227315
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=68
2024-11-29 12:38:51 +00:00
183fa1a4f9 Accepting request 1224887 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1224887
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=14
2024-11-18 18:57:22 +00:00
99d319aa5b Accepting request 1224886 from home:dimstar:Factory
hard-coded LLVM_version in the scripts.

Just a typo fixed

OBS-URL: https://build.opensuse.org/request/show/1224886
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=66
2024-11-18 14:04:00 +00:00
c9f290cdec Accepting request 1224835 from home:dimstar:Factory
- Allow building with default LLVM version 19: just replace the
  hard-coded LLVM_version in the scrpts.

OBS-URL: https://build.opensuse.org/request/show/1224835
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=65
2024-11-18 13:48:03 +00:00
6daf155ac4 - Require exact clang18 and llvm18, because apparently CPython is
not ready for 19 yet (gh#python/cpython!125499).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=64
2024-11-14 17:26:42 +00:00
be126e03ea - Remove -IVendor/ from python-config boo#1231795
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=63
2024-11-14 16:11:33 +00:00
d67c636211 Accepting request 1218353 from devel:languages:python:Factory
- Add CVE-2024-9287-venv_path_unquoted.patch to properly quote
  path names provided when creating a virtual environment
  (bsc#1232241, CVE-2024-9287)

OBS-URL: https://build.opensuse.org/request/show/1218353
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=13
2024-10-27 10:24:54 +00:00
9fd773a946 - Add CVE-2024-9287-venv_path_unquoted.patch to properly quote
path names provided when creating a virtual environment
  (bsc#1232241, CVE-2024-9287)

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=61
2024-10-25 14:01:31 +00:00
73ac4a887b Accepting request 1208371 from devel:languages:python:Factory
- With python311-Sphinx we don't need no-skipif-doctests.patch
  any more.
- Add warning about no-GIL builds being experimental.

OBS-URL: https://build.opensuse.org/request/show/1208371
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=12
2024-10-16 21:49:58 +00:00
994d248383 - With python311-Sphinx we don't need no-skipif-doctests.patch
any more.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=59
2024-10-16 07:27:11 +00:00
b8a809b1cc - Add warning about no-GIL builds being experimental.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=58
2024-10-10 11:18:53 +00:00
eb20745074 Accepting request 1206252 from devel:languages:python:Factory
- Update to 3.13.0:
  Major new features of the 3.13 series, compared to 3.12
  Some of the new major new features and changes in Python 3.13 are:
  - New features
    - A new and improved interactive interpreter, based on
      PyPy's, featuring multi-line editing and color support, as
      well as colorized exception tracebacks.
    - An experimental free-threaded build mode, which disables
      the Global Interpreter Lock, allowing threads to run
      more concurrently. The build mode is available as an
      experimental feature in the Windows and macOS installers as
      well.
    - A preliminary, experimental JIT, providing the ground work
      for significant performance improvements.
    - The locals() builtin function (and its C equivalent)
      now has well-defined semantics when mutating the
      returned mapping, which allows debuggers to operate more
      consistently.
    - A modified version of mimalloc is now included, optional
      but enabled by default if supported by the platform, and
      required for the free-threaded build mode.
    - Docstrings now have their leading indentation stripped,
      reducing memory use and the size of .pyc files. (Most tools
      handling docstrings already strip leading indentation.)
    - The dbm module has a new dbm.sqlite3 backend that is used
      by default when creating new files.
    - WASI is now a Tier 2 supported platform. Emscripten is
      no longer an officially supported platform (but Pyodide
      continues to support Emscripten).
  - Typing
    - Support for type defaults in type parameters.
    - A new type narrowing annotation, typing.TypeIs.
    - A new annotation for read-only items in TypeDicts.
    - A new annotation for marking deprecations in the type
      system.
  - Removals and new deprecations
    - PEP 594 (Removing dead batteries from the standard library)
      scheduled removals of many deprecated modules: aifc,
      audioop, chunk, cgi, cgitb, crypt, imghdr, mailcap, msilib,
      nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau,
      telnetlib, uu, xdrlib, lib2to3.
    - Many other removals of deprecated classes, functions and
      methods in various standard library modules.
    - C API removals and deprecations. (Some removals present
      in alpha 1 were reverted in alpha 2, as the removals were
      deemed too disruptive at this time.)
    - New deprecations, most of which are scheduled for removal
      from Python 3.15 or 3.16.
  - For more details on the changes to Python 3.13, see What's
    new in Python 3.13 in the documentation.

OBS-URL: https://build.opensuse.org/request/show/1206252
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=11
2024-10-08 15:24:58 +00:00
d5a98f8796 - Update to 3.13.0:
Major new features of the 3.13 series, compared to 3.12
  Some of the new major new features and changes in Python 3.13 are:
  - New features
    - A new and improved interactive interpreter, based on
      PyPy's, featuring multi-line editing and color support, as
      well as colorized exception tracebacks.
    - An experimental free-threaded build mode, which disables
      the Global Interpreter Lock, allowing threads to run
      more concurrently. The build mode is available as an
      experimental feature in the Windows and macOS installers as
      well.
    - A preliminary, experimental JIT, providing the ground work
      for significant performance improvements.
    - The locals() builtin function (and its C equivalent)
      now has well-defined semantics when mutating the
      returned mapping, which allows debuggers to operate more
      consistently.
    - A modified version of mimalloc is now included, optional
      but enabled by default if supported by the platform, and
      required for the free-threaded build mode.
    - Docstrings now have their leading indentation stripped,
      reducing memory use and the size of .pyc files. (Most tools
      handling docstrings already strip leading indentation.)
    - The dbm module has a new dbm.sqlite3 backend that is used
      by default when creating new files.
    - WASI is now a Tier 2 supported platform. Emscripten is
      no longer an officially supported platform (but Pyodide
      continues to support Emscripten).
  - Typing

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=56
2024-10-08 07:14:30 +00:00
d24d58c01e Accepting request 1205550 from devel:languages:python:Factory
- Drop .pyc files from docdir for reproducible builds (bsc#1230906).

OBS-URL: https://build.opensuse.org/request/show/1205550
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=10
2024-10-04 15:10:27 +00:00
9875af21c3 Fix the changelog
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=54
2024-10-03 15:03:11 +00:00
26d0509456 Accepting request 1205032 from devel:languages:python:Factory
- Update to 3.13.0~rc3:
  - The most important change is rolling back the incremental
    cyclic garbage collector (GC), which was added in one of
    the alpha releases. The incremental GC had more significant
    performance regressions in specific workloads than we
    expected.
  - Tests
    - gh-124378: Updated test_ttk to pass with Tcl/Tk 8.6.15.
  - Library
    - gh-124538: Fixed crash when using gc.get_referents() on a
      capsule object.
    - gh-124498: Fix typing.TypeAliasType not to be generic, when
      type_params is an empty tuple.
    - gh-123017: Due to unreliable results on some devices,
      time.strftime() no longer accepts negative years on
      Android.
    - gh-123014: os.pidfd_open() and signal.pidfd_send_signal()
      are now unavailable when building against Android API
      levels older than 31, since the underlying system calls may
      cause a crash.
    - gh-124248: Fixed potential crash when using struct to
      process zero-width ‘Pascal string’ fields (0p).
    - gh-87041: Fix a bug in argparse where lengthy subparser
      argument help is incorrectly indented.
    - gh-124212: Fix invalid variable in venv handling of failed
      symlink on Windows
    - gh-124171: Add workaround for broken fmod() implementations
      on Windows, that loose zero sign (e.g. fmod(-10, 1) returns
      0.0). Patch by Sergey B Kirpichev.
    - gh-123934: Fix unittest.mock.MagicMock reseting magic
      methods return values after .reset_mock(return_value=True)
      was called.
    - gh-123968: Fix the command-line interface for the random
      module to select floats between 0 and N, not 1 and N.
    - gh-123892: Add "_wmi" to sys.stdlib_module_names. Patch by
      Victor Stinner.
    - gh-123339: Fix inspect.getsource() for classes
      in collections.abc and decimal (for pure Python
      implementation) modules. inspect.getcomments() now raises
      OSError instead of IndexError if the __firstlineno__ value
      for a class is out of bound.
    - gh-121735: When working with zip archives,
      importlib.resources now properly honors module-adjacent
      references (e.g. files(pkg.mod) and not just files(pkg)).
    - gh-122145: Fix an issue when reporting tracebacks
      corresponding to Python code emitting an empty AST
      body. Patch by Nikita Sobolev and Bénédikt Tran.
    - gh-119004: Fix a crash in OrderedDict.__eq__ when operands
      are mutated during the check. Patch by Bénédikt Tran.
    - bpo-44864: Do not translate user-provided strings in
      argparse.ArgumentParser.
  - IDLE
    - gh-112938: Fix uninteruptable hang when Shell gets rapid
      continuous output.
    - gh-120104: Fix padding in config and search dialog windows
      in IDLE.
  - Documentation
    - gh-124720: Update “Using Python on a Mac” section of the
      “Python Setup and Usage” document and include information
      on installing free-threading support.
    - gh-116622: Add an Android platform guide, and flag modules
      not available on Android.
  - Core and Builtins
    - gh-124567: Revert the incremental GC (in 3.13), since it’s
      not clear the benefits outweigh the costs at this point.
    - gh-124642: Fixed scalability issue in free-threaded builds
      for lock-free reads from dictionaries in multi-threaded
      scenarios
    - gh-116510: Fix a bug that can cause a crash when
      sub-interpreters use “basic” single-phase extension
      modules. Shared objects could refer to PyGC_Head nodes that
      had been freed as part of interpreter cleanup.
    - gh-124547: When deallocating an object with inline values
      whose __dict__ is still live: if memory allocation for the
      inline values fails, clear the dictionary. Prevents an
      interpreter crash.
    - gh-124513: Fix a crash in FrameLocalsProxy constructor:
      check the number of arguments. Patch by Victor Stinner.
    - gh-124442: Fix nondeterminism in compilation by sorting the
      value of __static_attributes__. Patch by kp2pml30.
    - gh-123856: Fix PyREPL failure when a keyboard interrupt is
      triggered after using a history search
    - gh-65961: Document the deprecation of setting and using
      __package__ and __cached__.
    - gh-124027: Support <page up>, <page down>, and <delete>
      keys in the Python REPL when $TERM is set to vt100.
    - gh-77894: Fix possible crash in the garbage collector when
      it tries to break a reference loop containing a memoryview
      object. Now a memoryview object can only be cleared if
      there are no buffers that refer it.
    - gh-123339: Setting the __module__ attribute for a class now
      removes the __firstlineno__ item from the type’s dict, so
      they will no longer be inconsistent.
  - C API
    - gh-124160: Fix crash when importing modules containing
      state and single-phase initialization in a subinterpreter.
    - gh-123880: Fixed a bug that prevented circular imports of
      extension modules that use single-phase initialization.
  - Build
    - gh-124487: Windows builds now use Windows 8.1 as their API
      baseline (installation already required Windows 8.1).
    - gh-124043: Building using --with-trace-refs is
      (temporarily) disallowed when the GIL is disabled.
- Remove upstreamed patch:
  - gh-124040-fix-test-math-i586.patch

OBS-URL: https://build.opensuse.org/request/show/1205032
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=9
2024-10-02 19:33:43 +00:00
e84b2a9ea2 Fix the command
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=52
2024-10-01 23:47:53 +00:00
b7221c02d8 - Update to 3.13.0~rc3:
- The most important change is rolling back the incremental
    cyclic garbage collector (GC), which was added in one of
    the alpha releases. The incremental GC had more significant
    performance regressions in specific workloads than we
    expected.
  - Tests
    - gh-124378: Updated test_ttk to pass with Tcl/Tk 8.6.15.
  - Library
    - gh-124538: Fixed crash when using gc.get_referents() on a
      capsule object.
    - gh-124498: Fix typing.TypeAliasType not to be generic, when
      type_params is an empty tuple.
    - gh-123017: Due to unreliable results on some devices,
      time.strftime() no longer accepts negative years on
      Android.
    - gh-123014: os.pidfd_open() and signal.pidfd_send_signal()
      are now unavailable when building against Android API
      levels older than 31, since the underlying system calls may
      cause a crash.
    - gh-124248: Fixed potential crash when using struct to
      process zero-width ‘Pascal string’ fields (0p).
    - gh-87041: Fix a bug in argparse where lengthy subparser
      argument help is incorrectly indented.
    - gh-124212: Fix invalid variable in venv handling of failed
      symlink on Windows
    - gh-124171: Add workaround for broken fmod() implementations
      on Windows, that loose zero sign (e.g. fmod(-10, 1) returns
      0.0). Patch by Sergey B Kirpichev.
    - gh-123934: Fix unittest.mock.MagicMock reseting magic

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=51
2024-10-01 15:47:09 +00:00
3029e09e6c Accepting request 1202221 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1202221
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=8
2024-09-22 09:05:57 +00:00
ed950ec431 Accepting request 1201721 from home:dgarcia:branches:devel:languages:python:Factory
- Make it build for SLE SP7 (jsc#PED-10075):
  - Add CVE-2023-52425-libexpat-2.6.0-backport-15.6.patch to build in
    SLE-15-SP7.
  - Add fix-test-recursion-limit-15.6.patch, gh#python/cpython#115083
  - Add gh-124040-fix-test-math-i586.patch, gh#python/cpython#124042

OBS-URL: https://build.opensuse.org/request/show/1201721
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=49
2024-09-20 13:41:16 +00:00
5ddcd862f2 Accepting request 1199398 from devel:languages:python:Factory
- Update to 3.13.0~rc2:
  - Tools/Demos
    - gh-123418: Update GitHub CI workflows to use OpenSSL 3.0.15
      and multissltests to use 3.0.15, 3.1.7, and 3.2.3.
  - Tests
    - gh-119727: Add --single-process command line option to
      Python test runner (regrtest). Patch by Victor Stinner.
    - gh-101525: Skip test_gdb if the binary is relocated by
      BOLT. Patch by Donghee Na.
  - Security
    - gh-123678: Upgrade libexpat to 2.6.3
    - gh-121285: Remove backtracking from tarfile header parsing
      for hdrcharset, PAX, and GNU sparse headers (bsc#1230227,
      CVE-2024-6232).
  - Library
    - gh-123448: Fixed memory leak of typing.NoDefault by moving
      it to the static types array.
    - gh-123409: Fix ipaddress.IPv6Address.reverse_pointer output
      according to RFC 3596, §2.5. Patch by Bénédikt Tran.
    - gh-123270: Applied a more surgical fix for malformed
      payloads in zipfile.Path causing infinite loops (gh-122905)
      without breaking contents using legitimate characters
      (bsc#1229704, CVE-2024-8088).
    - gh-123228: Fix return type for
      _pyrepl.readline._ReadlineWrapper.get_line_buffer() to be
      str(). Patch by Sergey B Kirpichev.
    - gh-123240: Raise audit events for the input() in the new
      REPL.
    - gh-123243: Fix memory leak in _decimal.
    - gh-122546: Consistently use same file name for different

OBS-URL: https://build.opensuse.org/request/show/1199398
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=7
2024-09-09 12:43:49 +00:00
1474d9e3e7 - Also in the corresponding ipaddress.IPv4Network and
ipaddress.IPv6Network attributes.
        - Fixes bsc#1226448 (CVE-2024-4032).
      Stinner to improve the CVE-2023-27043 fix (bsc#1210638).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=47
2024-09-07 19:39:36 +00:00
6a96a3b53f - Update to 3.13.0~rc2:
- Tools/Demos
    - gh-123418: Update GitHub CI workflows to use OpenSSL 3.0.15
      and multissltests to use 3.0.15, 3.1.7, and 3.2.3.
  - Tests
    - gh-119727: Add --single-process command line option to
      Python test runner (regrtest). Patch by Victor Stinner.
    - gh-101525: Skip test_gdb if the binary is relocated by
      BOLT. Patch by Donghee Na.
  - Security
    - gh-123678: Upgrade libexpat to 2.6.3
    - gh-121285: Remove backtracking from tarfile header parsing
      for hdrcharset, PAX, and GNU sparse headers (bsc#1230227,
      CVE-2024-6232).
  - Library
    - gh-123448: Fixed memory leak of typing.NoDefault by moving
      it to the static types array.
    - gh-123409: Fix ipaddress.IPv6Address.reverse_pointer output
      according to RFC 3596, §2.5. Patch by Bénédikt Tran.
    - gh-123270: Applied a more surgical fix for malformed
      payloads in zipfile.Path causing infinite loops (gh-122905)
      without breaking contents using legitimate characters
      (bsc#1229704, CVE-2024-8088).
    - gh-123228: Fix return type for
      _pyrepl.readline._ReadlineWrapper.get_line_buffer() to be
      str(). Patch by Sergey B Kirpichev.
    - gh-123240: Raise audit events for the input() in the new
      REPL.
    - gh-123243: Fix memory leak in _decimal.
    - gh-122546: Consistently use same file name for different

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=46
2024-09-07 16:06:08 +00:00
a96d28f6cd Accepting request 1199169 from home:dgarcia:branches:devel:languages:python:Factory
- Build experimental package python313-nogil with
  --disable-gil option.

OBS-URL: https://build.opensuse.org/request/show/1199169
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=45
2024-09-06 21:07:58 +00:00
9d3910e32a Remove Modules/expat
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=44
2024-09-03 15:45:42 +00:00
d566f66214 - Add gh120226-fix-sendfile-test-kernel-610.patch to avoid
failing test_sendfile_close_peer_in_the_middle_of_receiving
  tests on Linux >= 6.10 (GH-120227).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=43
2024-09-02 10:20:54 +00:00
30eeed452e Accepting request 1197482 from devel:languages:python:Factory
- Add gh122136-test_asyncio-kernel-buffer-data.patch fixing
  gh#python/cpython#122136 (changes in kernel provide different
  amount of data in the socket buffers).
- Remove skip_test_abort_clients.patch, which is not needed any
  more.

- Add CVE-2024-8088-inf-loop-zipfile_Path.patch to prevent
  malformed payload to cause infinite loops in zipfile.Path
  (bsc#1229704, CVE-2024-8088).

OBS-URL: https://build.opensuse.org/request/show/1197482
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=6
2024-08-30 11:32:00 +00:00
d30e6ca376 - Add gh122136-test_asyncio-kernel-buffer-data.patch fixing
gh#python/cpython#122136 (changes in kernel provide different
  amount of data in the socket buffers).
- Remove skip_test_abort_clients.patch, which is not needed any
  more.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=41
2024-08-29 14:47:46 +00:00
fa823e120f - Add CVE-2024-8088-inf-loop-zipfile_Path.patch to prevent
malformed payload to cause infinite loops in zipfile.Path
  (bsc#1229704, CVE-2024-8088).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=40
2024-08-29 13:03:32 +00:00
3827c5d408 Accepting request 1193120 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1193120
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=5
2024-08-10 17:08:14 +00:00
6afb8e217a Accepting request 1192596 from home:Andreas_Schwab:riscv:python
- Update list of skipped tests in qemu linux-user emulation

OBS-URL: https://build.opensuse.org/request/show/1192596
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=38
2024-08-10 09:21:55 +00:00
2325ab9130 Accepting request 1192376 from devel:languages:python:Factory
- Add CVE-2024-6923-email-hdr-inject.patch to prevent email
  header injection due to unquoted newlines (bsc#1228780,
  CVE-2024-6923).
- Adding bso1227999-reproducible-builds.patch fixing bsc#1227999
  adding reproducibility patches from gh#python/cpython!121872
  and gh#python/cpython!121883.
- Add skip_test_abort_clients.patch (gh#python/cpython#122136)
  skip not yet fixed failing test
- %{profileopt} variable is set according to the variable
  %{do_profiling} (bsc#1227999)
- Update bluez-devel-vendor.tar.xz

- Update to 3.13.0~rc1:
  - Tests
    - gh-59022: Add tests for pkgutil.extend_path(). Patch by
      Andreas Stocker.
    - gh-99242: os.getloadavg() may throw OSError when
      running regression tests under certain conditions (e.g.
      chroot). This error is now caught and ignored, since
      reporting load average is optional.
  - Security
    - gh-122133: Authenticate the socket connection for the
      socket.socketpair() fallback on platforms where AF_UNIX is
      not available like Windows.
    - Patch by Gregory P. Smith <greg@krypto.org> and Seth Larson
      <seth@python.org>. Reported by Ellie <el@horse64.org>
    - gh-121957: Fixed missing audit events around interactive
      use of Python, now also properly firing for python -i, as
      well as for python -m asyncio. The events in question are
      cpython.run_stdin and cpython.run_startup.

OBS-URL: https://build.opensuse.org/request/show/1192376
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=4
2024-08-08 08:58:35 +00:00
8eb4d86563 Fix the changelog
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=36
2024-08-07 21:42:22 +00:00
34a67fa7c5 - Adding bso1227999-reproducible-builds.patch fixing bsc#1227999
adding reproducibility patches from gh#python/cpython!121872
  and gh#python/cpython!121883.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=35
2024-08-07 18:01:20 +00:00
648323dfb5 - Add CVE-2024-6923-email-hdr-inject.patch to prevent email
header injection due to unquoted newlines (bsc#1228780,
  CVE-2024-6923).
- %{profileopt} variable is set according to the variable
  %{do_profiling} (bsc#1227999)

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=34
2024-08-07 14:51:11 +00:00
18edb4412d - Update bluez-devel-vendor.tar.xz
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=33
2024-08-07 13:41:11 +00:00
bb1b0a85b2 Add skip_test_abort_clients.patch to avoid failing test (gh#python/cpython#122136)
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=32
2024-08-07 13:34:52 +00:00
31416b1907 - Update to 3.13.0~rc1:
- Tests
    - gh-59022: Add tests for pkgutil.extend_path(). Patch by
      Andreas Stocker.
    - gh-99242: os.getloadavg() may throw OSError when
      running regression tests under certain conditions (e.g.
      chroot). This error is now caught and ignored, since
      reporting load average is optional.
  - Security
    - gh-122133: Authenticate the socket connection for the
      socket.socketpair() fallback on platforms where AF_UNIX is
      not available like Windows.
    - Patch by Gregory P. Smith <greg@krypto.org> and Seth Larson
      <seth@python.org>. Reported by Ellie <el@horse64.org>
    - gh-121957: Fixed missing audit events around interactive
      use of Python, now also properly firing for python -i, as
      well as for python -m asyncio. The events in question are
      cpython.run_stdin and cpython.run_startup.
  - Library
    - gh-122400: Handle ValueErrors raised by os.stat() in
      filecmp.dircmp and filecmp.cmpfiles(). Patch by Bénédikt
      Tran.
    - gh-122311: Fix some error messages in pickle.
    - gh-122332: Fixed segfault with asyncio.Task.get_coro() when
      using an eager task factory.
    - gh-105733: ctypes.ARRAY() is now soft deprecated: it no
      longer emits deprecation warnings and is not scheduled for
      removal.
    - gh-122087: Restore inspect.ismethoddescriptor() and
      inspect.isroutine() returning False for functools.partial

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=31
2024-08-01 10:42:44 +00:00
da884a6e9b Accepting request 1189339 from devel:languages:python:Factory
- Update F00251-change-user-install-location.patch to install packages
  in /usr/local by default when using pip outside of a RPMBUILD
  environment.
- Update to 3.13.0~b4:
  - Tests
    - gh-121084: Fix test_typing random leaks. Clear typing ABC
      caches when running tests for refleaks (-R option): call
      _abc_caches_clear() on typing abstract classes and their
      subclasses.
    - gh-121160: Add a test for
      readline.set_history_length(). Note that this test may fail
      on readline libraries.
    - gh-121200: Fix test_expanduser_pwd2() of
      test_posixpath. Call getpwnam() to get pw_dir, since it
      can be different than getpwall() pw_dir.
    - gh-121188: When creating the JUnit XML file, regrtest
      now escapes characters which are invalid in XML, such
      as the chr(27) control character used in ANSI escape
      sequences.
  - Library
    - gh-57141: The shallow argument to filecmp.dircmp (new in
      Python 3.13) is now keyword-only.
    - gh-121245: Simplify handling of the history file in
      site.register_readline() helper. The CAN_USE_PYREPL
      variable now will be initialized, when imported.
    - gh-121332: Fix constructor of ast nodes with custom
      _attributes. Previously, passing custom attributes would
      raise a DeprecationWarning. Passing arguments to the
      constructor that are not in _fields or _attributes remains
      deprecated.
    - gh-121279: Avoid NameError for the warnings module when
      accessing the depracated atributes of the importlib.abc
      module.
    - gh-121245: Fix a bug in the handling of the command history
      of the new REPL that caused the history file to be wiped at
      REPL exit.
    - gh-87744: Fix waitpid race while calling send_signal() in
      asyncio.
    - gh-121018: Fixed other issues where argparse.ArgumentParser
      did not honor exit_on_error=False.
    - gh-120678: Fix regression in the new REPL that meant that
      globals from files passed using the -i argument would not
      be included in the REPL’s global namespace.
    - gh-120782: Fix wrong references of the datetime types after
      reloading the module.
    - gh-120713: datetime.datetime.strftime() now 0-pads years
      with less than four digits for the format specifiers %Y and
      %G on Linux.
    - gh-117983: Defer the threading import in importlib.util
      until lazy loading is used.
    - gh-119189: When using the ** operator or pow() with
      Fraction as the base and an exponent that is not rational,
      a float, or a complex, the fraction is no longer converted
      to a float.
    - gh-118714: Allow restart in post-mortem debugging of
      pdb. Removed restart message when the user quits pdb from
      post-mortem mode.
    - gh-105623: Fix performance degradation in
      logging.handlers.RotatingFileHandler.
  - IDLE
    - gh-78889: Stop Shell freezes by blocking user access to
      non-method sys.stdout.shell attributes, which are all
      private.
  - Documentation
    - gh-121749: Fix documentation for PyModule_AddObjectRef().
    - gh-120012: Clarify the behaviours of
      multiprocessing.Queue.empty() and
      multiprocessing.SimpleQueue.empty() on closed queues.
  - Core and Builtins
    - gh-121860: Fix crash when rematerializing a managed
      dictionary after it was deleted.
    - gh-121814: Fixed the SegFault when PyEval_SetTrace() is
      used with no Python frame on stack.
    - gh-121295: Fix PyREPL console getting into a blocked state
      after interrupting a long paste
    - gh-121794: Fix bug in free-threaded Python where a
      resurrected object could lead to a negative ref count
      assertion failure.
    - gh-121657: Improve the SyntaxError message if the user
      tries to use yield from outside a function.
    - gh-121609: Fix pasting of characters containing unicode
      character joiners in the new REPL. Patch by Marta Gomez
      Macias
    - gh-117482: Unexpected slot wrappers are no longer created
      for builtin static types in subinterpreters.
    - gh-121499: Fix a bug affecting how multi-line history was
      being rendered in the new REPL after interacting with the
      new screen cache. Patch by Pablo Galindo
    - gh-121497: Fix a bug that was preventing the REPL to
      correctly respect the history when an input hook was
      set. Patch by Pablo Galindo
    - gh-121012: Tier 2 execution now ensures that list iterators
      remain exhausted, once they become exhausted.
    - gh-121439: Allow tuples of length 20 in the freelist to be
      reused.
    - gh-121368: Fix race condition in _PyType_Lookup in the
      free-threaded build due to a missing memory fence. This
      could lead to _PyType_Lookup returning incorrect results on
      arm64.
    - gh-121130: Fix f-strings with debug expressions in format
      specifiers. Patch by Pablo Galindo
    - gh-121115: PyLong_AsNativeBytes() no longer
      uses __index__() methods by default. The
      Py_ASNATIVEBYTES_ALLOW_INDEX flag has been added to allow
      it.
  - C API
    - gh-89364: Export the PySignal_SetWakeupFd()
      function. Previously, the function was documented but
      it couldn’t be used in 3rd party code. Patch by Victor
      Stinner.
    - gh-113993: PyUnicode_InternInPlace() no longer
      Seprevents its argument from being garbage collected
      Several functions that take char * are now documented
      Seas possibly preventing string objects from being
      Segarbage collected; refer to their documentation
      Sefor details: PyUnicode_InternFromString(),
      SePyDict_SetItemString(), PyObject_SetAttrString(),
      SePyObject_DelAttrString(), PyUnicode_InternFromString(),
      Seand PyModule_Add* convenience functions
    - gh-113601: Removed debug build assertions related to
      interning strings, which were falsely triggered by stable
      ABI extensions.
    - gh-112136: Restore the private _PyArg_Parser structure and
      the private _PyArg_ParseTupleAndKeywordsFast() function,
      previously removed in Python 3.13 alpha 1. Patch by Victor
      Stinner.
  - Build
    - gh-120371: Support WASI SDK 22 by explicitly skipping
      functions that are just stubs in wasi-libc.
    - gh-121731: Fix mimalloc compile error on GNU/Hurd
    - gh-121487: Fix deprecation warning for ATOMIC_VAR_INIT in
      mimalloc.
    - gh-121467: Fix a Makefile bug that prevented mimalloc
      header files from being installed.
    - gh-121103: On POSIX systems, excluding macOS framework
      installs, the lib directory for the free-threaded build now
      includes a “t” suffix to avoid conflicts with a co-located
      default build installation.
    - gh-120831: The default minimum iOS version was increased to
      13.0.
    - gh-113565: Improve curses and curses.panel dependency
      checks in configure.
- Remove %suse_update_desktop_file macro as it is not useful any
  more.

OBS-URL: https://build.opensuse.org/request/show/1189339
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=3
2024-07-25 13:38:59 +00:00
6912c8cc4e - Update F00251-change-user-install-location.patch to install packages
in /usr/local by default when using pip outside of a RPMBUILD
  environment.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=29
2024-07-24 08:32:48 +00:00
b81fd3c63c - Remove %suse_update_desktop_file macro as it is not useful any
more.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=28
2024-07-22 21:14:56 +00:00
727c999e70 _curses_panel
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=27
2024-07-22 20:14:43 +00:00
d6957de319 - Update to 3.13.0~b4:
- Tests
    - gh-121084: Fix test_typing random leaks. Clear typing ABC
      caches when running tests for refleaks (-R option): call
      _abc_caches_clear() on typing abstract classes and their
      subclasses.
    - gh-121160: Add a test for
      readline.set_history_length(). Note that this test may fail
      on readline libraries.
    - gh-121200: Fix test_expanduser_pwd2() of
      test_posixpath. Call getpwnam() to get pw_dir, since it
      can be different than getpwall() pw_dir.
    - gh-121188: When creating the JUnit XML file, regrtest
      now escapes characters which are invalid in XML, such
      as the chr(27) control character used in ANSI escape
      sequences.
  - Library
    - gh-57141: The shallow argument to filecmp.dircmp (new in
      Python 3.13) is now keyword-only.
    - gh-121245: Simplify handling of the history file in
      site.register_readline() helper. The CAN_USE_PYREPL
      variable now will be initialized, when imported.
    - gh-121332: Fix constructor of ast nodes with custom
      _attributes. Previously, passing custom attributes would
      raise a DeprecationWarning. Passing arguments to the
      constructor that are not in _fields or _attributes remains
      deprecated.
    - gh-121279: Avoid NameError for the warnings module when
      accessing the depracated atributes of the importlib.abc
      module.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=26
2024-07-22 19:00:44 +00:00
45a1da448a Accepting request 1186945 from devel:languages:python:Factory
Automatic submission by obs-autosubmit

OBS-URL: https://build.opensuse.org/request/show/1186945
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=2
2024-07-12 15:04:41 +00:00
ed93a74c21 Accepting request 1185326 from devel:languages:python:Factory
New version of the Python interpreter.

OBS-URL: https://build.opensuse.org/request/show/1185326
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=1
2024-07-05 17:46:53 +00:00
8be8178387 - Stop using %%defattr, it seems to be breaking proper executable
attributes on /usr/bin/ scripts (bsc#1227378).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=23
2024-07-04 18:10:47 +00:00
8f89a6f1a9 Testing bindir
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=22
2024-07-04 16:46:27 +00:00
58dda96c93 - Stop using %%defattr.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=21
2024-07-04 16:04:20 +00:00
5a06fe7d3f Accepting request 1184193 from home:dirkmueller:branches:openSUSE:Factory:Rings:1-MinimalX
- move pathlib to -base
- move _pyrepl to -base (used by pydoc which is in base)
- fix import-mapping

- restrict PEP668 to ALP/Tumbleweed
  * Support Expat >= 2.4.5
- allow build with Sphinx >= 3.x
  * remove importlib_resources and importlib-metadata
  - bpo-41304: Fixes python3x._pth being ignored on Windows, caused
  - bpo-29778: Ensure python3.dll is loaded from correct locations
  - bpo-39603: Prevent http header injection by rejecting control
    “__setattr__” in a multi-inheritance setup and
  - bpo-41247: Always cache the running loop holder when running
  - bpo-41252: Fix incorrect refcounting in
  - bpo-41215: Use non-NULL default values in the PEG parser
  - bpo-41218: Python 3.8.3 had a regression where compiling with
    ast.PyCF_ALLOW_TOP_LEVEL_AWAIT would
  - bpo-41175: Guard against a NULL pointer dereference within
  - bpo-39960: The “hackcheck” that prevents sneaking around a type’s
    __setattr__() by calling the superclass method was
  - bpo-41288: Unpickling invalid NEWOBJ_EX opcode with the
  - bpo-39017: Avoid infinite loop when reading specially crafted
  - bpo-41207: In distutils.spawn, restore expectation that
  - bpo-41194: Fix a crash in the _ast module: it can no longer be
  - bpo-39384: Fixed email.contentmanager to allow set_content() to set a
  - bpo-41300: Save files with non-ascii chars.
  - bpo-37765: Add keywords to module name completion list.
  - bpo-40170: Revert PyType_HasFeature() change: it reads
    again directly the PyTypeObject.tp_flags
    member when the limited C API is not used, rather than always calling

OBS-URL: https://build.opensuse.org/request/show/1184193
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=20
2024-07-01 06:39:49 +00:00
2a85f6bbe8 - Update to 3.13.0~b2:
* Core and Builtins
    - gh-119462: Make sure that invariants of type versioning are
      maintained:
      * Superclasses always have their version number assigned
        before subclasses
      * The version tag is always zero if the tag is not valid.
      * The version tag is always non-zero if the tag is valid.
    - gh-120437: Fix _CHECK_STACK_SPACE optimization problems
      introduced in gh-118322.
    - gh-120722: Correctly set the bytecode position on return
      instructions within lambdas. Patch by Jelle Zijlstra.
    - gh-120367: Fix bug where compiler creates a redundant
      jump during pseudo-op replacement. Can only happen with
      a synthetic AST that has a try on the same line as the
      instruction following the exception handler.
    - gh-113993: Strings interned with sys.intern() are again
      garbage-collected when no longer used, as per the
      documentation. Strings interned with the C function
      PyUnicode_InternInPlace() are still immortal. Internals of
      the string interning mechanism have been changed. This may
      affect performance and identities of str objects.
    - gh-120384: Fix an array out of bounds crash in
      list_ass_subscript, which could be invoked via some
      specificly tailored input: including concurrent
      modification of a list object, where one thread assigns a
      slice and another clears it.
    - gh-120367: Fix crash in compiler on code with redundant
      NOPs and JUMPs which show up after exception handlers are
      moved to the end of the code.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=19
2024-06-28 06:33:35 +00:00
ed786f6cde Accepting request 1178998 from home:dgarcia:branches:devel:languages:python:Factory
- Fix doc package build
  gh#python/cpython#120150
- Update to 3.13.0b2:
  - Security
    - gh-118773: Fixes creation of ACLs in os.mkdir() on Windows to
      work correctly on non-English machines.
    - gh-118486: os.mkdir() on Windows now accepts mode of 0o700 to
      restrict the new directory to the current user. This fixes
      CVE-2024-4030 affecting tempfile.mkdtemp() in scenarios where
      the base temporary directory is more permissive than the
      default.
  - Core and Builtins
    - gh-119724: Reverted improvements to error messages for elif/else
      statements not matching any valid statements, which made in hard
      to locate the syntax errors inside those elif/else blocks.
    - gh-119842: Honor PyOS_InputHook() in the new REPL. Patch by
      Pablo Galindo
    - gh-119821: Fix execution of annotation scopes within classes
      when globals is set to a non-dict. Patch by Jelle Zijlstra.
    - gh-119548: Add a clear command to the REPL. Patch by Pablo
      Galindo
    - gh-111999: Fix the signature of str.format_map().
    - gh-119560: An invalid assert in beta 1 has been removed. The
      assert would fail if PyState_FindModule() was used in an
      extension module’s init function before the module def had been
      initialized.
    - gh-119369: Fix deadlock during thread deletion in free-threaded
      build, which could occur when the GIL was enabled at runtime.
    - gh-119525: Fix deadlock involving _PyType_Lookup() cache in the
      free-threaded build when the GIL is dynamically enabled at
      runtime.
    - gh-119311: Fix bug where names are unexpectedly mangled in the
      bases of generic classes.
    - gh-119395: Fix bug where names appearing after a generic class
      are mangled as if they are in the generic class.
    - gh-119213: Non-builtin modules built with argument clinic were
      crashing if used in a subinterpreter before the main
      interpreter. The objects that were causing the problem by
      leaking between interpreters carelessly have been fixed.
    - gh-119011: Fixes type.__type_params__ to return an empty tuple
      instead of a descriptor.
    - gh-118692: Avoid creating unnecessary StopIteration instances
      for monitoring.
    - gh-119049: Fix displaying the source line for warnings created
      by the C API if the warnings module had not yet been imported.
    - gh-118844: Fix build failures when configuring with both
      --disable-gil and --enable-experimental-jit.
    - gh-118921: Add copy() method for FrameLocalsProxy which returns
      a snapshot dict for local variables.
    - gh-117657: Fix data races on the field that stores a pointer to
      the interpreter’s main thread that occur in free-threaded
      builds.
    - gh-118507: Speedup os.path.isjunction() and os.path.lexists() on
      Windows with a native implementation.
    - gh-118561: Fix race condition in free-threaded build where
      list.extend() could expose uninitialised memory to concurrent
      readers.
    - gh-118263: Speed up os.path.splitroot() & os.path.normpath()
      with a direct C call.
    - gh-117195: Avoid assertion failure for debug builds when calling
      object.__sizeof__(1)
  - Library
    - gh-119819: Fix regression to allow logging configuration with
      multiprocessing queue types.
    - gh-117142: The ctypes module may now be imported in all
      subinterpreters, including those that have their own GIL.
    - gh-118835: Fix _pyrepl crash when using custom prompt with ANSI
      escape codes.
    - gh-117398: The _datetime module (C implementation for datetime)
      now supports being imported in multiple interpreters.
    - gh-89727: Fix issue with shutil.rmtree() where a RecursionError
      is raised on deep directory trees.
    - gh-89727: Partially fix issue with shutil.rmtree() where a
      RecursionError is raised on deep directory trees. A recursion
      error is no longer raised when rmtree.avoids_symlink_attacks is
      false.
    - gh-119118: Fix performance regression in the tokenize module by
      caching the line token attribute and calculating the column
      offset more efficiently.
    - gh-89727: Fix issue with os.fwalk() where a RecursionError was
      raised on deep directory trees by adjusting the implementation
      to be iterative instead of recursive.
    - gh-119588: zipfile.Path.is_symlink now assesses if the given
      path is a symlink.
    - gh-119555: Catch SyntaxError from compile() in the runsource()
      method of the InteractiveColoredConsole. Patch by Sergey B
      Kirpichev.
    - gh-113892: Now, the method sock_connect of
      asyncio.ProactorEventLoop raises a ValueError if given socket is
      not in non-blocking mode, as well as in other loop
      implementations.
    - gh-119443: The interactive REPL no longer runs with from
      __future__ import annotations enabled. Patch by Jelle Zijlstra.
    - gh-117398: Objects in the datetime C-API are now all statically
      allocated, which means better memory safety, especially when the
      module is reloaded. This should be transparent to users.
    - gh-118894: asyncio REPL now has the same capabilities as PyREPL.
    - gh-118911: In PyREPL, updated maybe-accept’s logic so that if
      the user hits Enter twice, they are able to terminate the block
      even if there’s trailing whitespace. Also, now when the user
      hits arrow up, the cursor is on the last functional line. This
      matches IPython’s behavior. Patch by Aya Elsayed.
    - gh-111201: Remove dependency to readline from the new Python
      REPL.
    - gh-119174: Fix high DPI causes turtledemo(turtle-graphics
      examples) windows blurry Patch by Wulian233 and Terry Jan Reedy
    - gh-119121: Fix a NameError happening in
      asyncio.staggered.staggered_race. This function is now tested.
    - gh-119113: Fix issue where pathlib.PurePath.with_suffix() didn’t
      raise TypeError when given None as a suffix.
    - gh-118643: Fix an AttributeError in the email module when
      re-fold a long address list. Also fix more cases of incorrect
      encoding of the address separator in the address list.
    - gh-58933: Make pdb return to caller frame correctly when f_trace
      of the caller frame is not set
    - gh-118895: Setting attributes on typing.NoDefault now raises
      AttributeError instead of TypeError.
    - gh-118868: Fixed issue where kwargs were no longer passed to the
      logging handler QueueHandler
    - gh-118851: ctx arguments to the constructors of ast node classes
      now default to ast.Load(). Patch by Jelle Zijlstra.
    - gh-118760: Restore the default value of tkiter.wantobjects to 1.
    - gh-118760: Fix errors in calling Tkinter bindings on Windows.
    - gh-118772: Allow typing.TypeVar instances without a default to
      follow instances without a default in some cases. Patch by Jelle
      Zijlstra.
    - gh-110863: os.path.realpath() now suppresses any OSError from
      os.readlink() when strict mode is disabled (the default).
    - gh-118033: Fix dataclasses.dataclass() not creating a
      __weakref__ slot when subclassing typing.Generic.
    - gh-106531: In importlib.resources, sync with importlib_resources
      6.3.2, including: MultiplexedPath now expects Traversable paths,
      deprecating string arguments to MultiplexedPath; Enabled support
      for resources in namespace packages in zip files; Fixed
      NotADirectoryError when calling files on a subdirectory of a
      namespace package.
    - gh-113978: Ignore warnings on text completion inside REPL.
    - gh-103956: Fix lack of newline characters in trace module output
      when line tracing is enabled but source code line for current
      frame is not available.
    - gh-92081: Fix missing spaces in email headers when the spaces
      are mixed with encoded 8-bit characters.
    - gh-103194: Prepare Tkinter for C API changes in Tcl 8.7/9.0 to
      avoid _tkinter.Tcl_Obj being unexpectedly returned instead of
      bool, str, bytearray, or int.
    - gh-87106: Fixed handling in inspect.Signature.bind() of keyword
      arguments having the same name as positional-only arguments when
      a variadic keyword argument (e.g. **kwargs) is present.
    - bpo-45767: Fix integer conversion in os.major(), os.minor(), and
      os.makedev(). Support device numbers larger than 2**63-1.
      Support non-existent device number (NODEV).
    - gh-67693: Fix urllib.parse.urlunparse() and
      urllib.parse.urlunsplit() for URIs with path starting with
      multiple slashes and no authority. Based on patch by Ashwin
      Ramaswami.
  - Tests
    - gh-119050: regrtest test runner: Add XML support to the refleak
      checker (-R option). Patch by Victor Stinner.  Buil- d
    - gh-119729: On POSIX systems, the pkg-config (.pc) filenames now
      include the ABI flags, which may include debug (“d”) and
      free-threaded (“t”). For example: * python-3.14.pc (default,
      non-debug build) * python-3.14d.pc (default, debug build) *
      python-3.14t.pc (free-threaded build)
    - gh-115119: Fall back to the bundled libmpdec if a system version
      cannot be found.
    - gh-119132: Update sys.version to identify whether the build is
      default build or free-threading build. Patch By Donghee Na.
    - gh-118836: Fix an AssertionError when building with
      --enable-experimental-jit and the compiler emits a SHT_NOTE
      section.
    - gh-118943: Fix a possible race condition affecting parallel
      builds configured with --enable-experimental-jit, in which
      compilation errors could be caused by an incompletely-generated
      header file.
  - Windows
    - gh-119679: Ensures correct import libraries are included in
      Windows installs.
    - gh-119690: Adds Unicode support and fixes audit events for
      _winapi.CreateNamedPipe.
    - gh-111201: Add support for new pyrepl on Windows
    - gh-119070: Fixes py.exe handling of shebangs like /usr/bin/env
      python3.12, which were previously interpreted as python3.exe
      instead of python3.12.exe.
    - gh-117505: Fixes an issue with the Windows installer not running
      ensurepip in a fully isolated environment. This could cause
      unexpected interactions with the user site-packages.
    - gh-118209: Avoid crashing in mmap on Windows when the mapped
      memory is inaccessible due to file system errors or access
      violations.
    - gh-116145: Updated bundled Tcl/Tk to 8.6.14.
  - C API
    - gh-119585: Fix crash when a thread state that was created by
      PyGILState_Ensure() calls a destructor that during
      PyThreadState_Clear() that calls back into PyGILState_Ensure()
      and PyGILState_Release(). This might occur when in the
      free-threaded build or when using thread-local variables whose
      destructors call PyGILState_Ensure().
    - gh-119336: Restore the removed _PyLong_NumBits() function. It is
      used by the pywin32 project. Patch by Ethan Smith
    - gh-119247: Added Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST and
      Py_END_CRITICAL_SECTION_SEQUENCE_FAST macros to make it possible
      to use PySequence_Fast APIs safely when free-threaded, and
      update str.join to work without the GIL using them.
    - gh-111389: Add PyHASH_MULTIPLIER constant: prime multiplier used
      in string and various other hashes. Patch by Victor Stinner.
    - gh-116984: Make mimalloc includes relative to the current file
      to avoid embedders or extensions needing to include
      Internal/mimalloc if they are already including internal CPython
      headers.
    - gh-118789: Restore _PyWeakref_ClearRef that was previously
      removed in Python 3.13 alpha 1.

OBS-URL: https://build.opensuse.org/request/show/1178998
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=18
2024-06-06 10:39:42 +00:00
4e91415a72 Accepting request 1175710 from home:dgarcia:branches:devel:languages:python:Factory
- Fix build for hwcaps architectures

OBS-URL: https://build.opensuse.org/request/show/1175710
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=17
2024-05-22 08:15:34 +00:00
f99fa3b4a5 - Enable experimental_jit just for supported arches
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=16
2024-05-10 07:30:18 +00:00
2120051248 - Use proper version name including tilda to separate pre-release
version.
  https://en.opensuse.org/openSUSE:Package_versioning_guidelines

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=15
2024-05-09 12:31:43 +00:00
7eaae69a60 - Disable experimental_jit for i586
- Remove _pyrepl from base

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=14
2024-05-09 10:45:22 +00:00
a4dc42ba84 - Add --enable-experimental-jit=yes-off to the build
- Update to 3.13.0a5
  * Security
    - gh-115398: Allow controlling Expat >=2.6.0 reparse deferral
      (CVE-2023-52425) by adding five new methods:
    -     xml.etree.ElementTree.XMLParser.flush()
    -     xml.etree.ElementTree.XMLPullParser.flush()
    -     xml.parsers.expat.xmlparser.GetReparseDeferralEnabled()
    -     xml.parsers.expat.xmlparser.SetReparseDeferralEnabled()
    -     xml.sax.expatreader.ExpatParser.flush()
    - gh-114572: ssl.SSLContext.cert_store_stats() and
      ssl.SSLContext.get_ca_certs() now correctly lock access to the
      certificate store, when the ssl.SSLContext is shared across
      multiple threads.  Core-  and Builtins
    - gh-116604: Respect the status of the garbage collector when
      indirect calls are made via PyErr_CheckSignals() and the
      evaluation breaker. Patch by Pablo Galindo
    - gh-112087: list is now compatible with the implementation of PEP
      703.
    - gh-116381: Add specialization for CONTAINS_OP.
    - gh-116296: Fix possible refleak in object.__reduce__() internal
      error handling.
    - gh-115823: Properly calculate error ranges in the parser when
      raising SyntaxError exceptions caused by invalid byte sequences.
      Patch by Pablo Galindo
    - gh-115778: Add tierN annotation for instruction definition in
      interpreter DSL.
    - gh-115733: Fix crash when calling next() on exhausted list
      iterators.
    - gh-115700: The regen-cases build stage now works on Windows.
    - gh-115347: Fix bug where docstring was replaced by a redundant

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=13
2024-05-09 09:59:06 +00:00
ee738c9b79 Add missing name of libraries
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=12
2024-03-20 21:03:31 +00:00
447b043d69 Fix %%autopatch
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=11
2024-03-20 05:28:14 +00:00
d51b4f3c7a - Update to 3.13.0a5:
- Security
    - gh-115398: Allow controlling Expat >=2.6.0 reparse deferral
      (CVE-2023-52425) by adding five new methods:
        xml.etree.ElementTree.XMLParser.flush()
        xml.etree.ElementTree.XMLPullParser.flush()
        xml.parsers.expat.xmlparser.GetReparseDeferralEnabled()
        xml.parsers.expat.xmlparser.SetReparseDeferralEnabled()
        xml.sax.expatreader.ExpatParser.flush()
    - gh-114572: ssl.SSLContext.cert_store_stats() and
      ssl.SSLContext.get_ca_certs() now correctly lock access to
      the certificate store, when the ssl.SSLContext is shared
      across multiple threads.
  - Core and Builtins
    - gh-116604: Respect the status of the garbage collector when
      indirect calls are made via PyErr_CheckSignals() and the
      evaluation breaker. Patch by Pablo Galindo
    - gh-112087: list is now compatible with the implementation
      of PEP 703.
    - gh-116381: Add specialization for CONTAINS_OP.
    - gh-116296: Fix possible refleak in object.__reduce__()
      internal error handling.
    - gh-115823: Properly calculate error ranges in the parser
      when raising SyntaxError exceptions caused by invalid byte
      sequences. Patch by Pablo Galindo
    - gh-115778: Add tierN annotation for instruction definition
      in interpreter DSL.
    - gh-115733: Fix crash when calling next() on exhausted list
      iterators.
    - gh-115700: The regen-cases build stage now works on

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=10
2024-03-20 05:23:44 +00:00
46a04323e0 - Drop gh115133-XMLPullParserTest-fail.patch upstreamed now.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=9
2024-03-07 08:17:31 +00:00
4dc8935b4f OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=8 2024-03-06 21:50:50 +00:00
4a63e4ee14 Accepting request 1155094 from home:dgarcia:branches:devel:languages:python:Factory
- Drop upstreamed patch gh115133-XMLPullParserTest-fail.patch
- Update to 3.13.0a4
  - Security
    - gh-115399: Update bundled libexpat to 2.6.0
    - gh-115243: Fix possible crashes in collections.deque.index()
      when the deque is concurrently modified.
  - Core and Builtins
    - gh-112087: For an empty reverse iterator for list will be
      reduced to reversed(). Patch by Donghee Na
    - gh-114570: Add PythonFinalizationError exception. This exception
      derived from RuntimeError is raised when an operation is blocked
      during the Python finalization. Patch by Victor Stinner.
    - gh-114695: Add sys._clear_internal_caches(), which clears all
      internal performance-related caches (and deprecate the
      less-general sys._clear_type_cache() function).
    - gh-114828: Fix compilation crashes in uncommon code examples
      using super() inside a comprehension in a class body.
    - gh-112069: Adapt set and frozenset methods to Argument Clinic.
    - gh-115011: Setters for members with an unsigned integer type now
      support the same range of valid values for objects that has a
      __index__() method as for int.
    - gh-114887: Changed socket type validation in
      create_datagram_endpoint() to accept all non-stream sockets.
      This fixes a regression in compatibility with raw sockets.
    - gh-114944: Fixes a race between PyParkingLot_Park and
      _PyParkingLot_UnparkAll.
    - gh-113462: Limit the number of versions that a single class can
      use. Prevents a few wayward classes using up all the version
      numbers.
    - gh-76763: The chr() builtin function now always raises
      ValueError for values outside the valid range. Previously it
      raised OverflowError for very large or small values.
    - gh-114806: No longer specialize calls to classes, if those
      classes have metaclasses. Fixes bug where the __call__ method of
      the metaclass was not being called.
    - gh-107944: Improve error message for function calls with bad
      keyword arguments via getargs
    - gh-112529: The free-threaded build no longer allocates space for
      the PyGC_Head structure in objects that support cyclic garbage
      collection. A number of other fields and data structures are
      used as replacements, including ob_gc_bits, ob_tid, and mimalloc
      internal data structures.
    - gh-114456: Lower the recursion limit under a debug build of
      WASI.
    - gh-114083: Compiler applies folding of LOAD_CONST with following
      instruction in a separate pass before other optimisations. This
      enables jump threading in certain circumstances.
    - gh-114388: Fix a RuntimeWarning emitted when assign an
      integer-like value that is not an instance of int to an
      attribute that corresponds to a C struct member of type T_UINT
      and T_ULONG. Fix a double RuntimeWarning emitted when assign a
      negative integer value to an attribute that corresponds to a C
      struct member of type T_UINT.
    - gh-114265: Compiler propagates line numbers before optimization,
      leading to more optimization opportunities and removing the need
      for the guarantee_lineno_for_exits hack.
    - gh-112529: The free-threaded build now has its own thread-safe
      GC implementation that uses mimalloc to find GC tracked objects.
      It is non-generational, unlike the existing GC implementation.
    - gh-114050: Fix segmentation fault caused by an incorrect format
      string in TypeError exception when more than two arguments are
      passed to int.
    - gh-112354: The END_FOR instruction now pops only one value. This
      is to better support side exits in loops.
    - gh-113884: Make queue.SimpleQueue thread safe when the GIL is
      disabled.
    - gh-114058: Implement the foundations of the Tier 2 redundancy
      eliminator.
    - gh-113939: frame.clear(): Clear frame.f_locals as well, and not
      only the fast locals. This is relevant once frame.f_locals was
      accessed, which would contain also references to all the locals.
    - gh-112050: Convert collections.deque to use Argument Clinic.
    - gh-112050: Make methods on collections.deque thread-safe when
      the GIL is disabled.
    - gh-113464: Add an option (--enable-experimental-jit for
      configure-based builds or --experimental-jit for PCbuild-based
      ones) to build an experimental just-in-time compiler, based on
      copy-and-patch
    - gh-113055: Make interp->obmalloc a pointer. For interpreters
      that share state with the main interpreter, this points to the
      same static memory structure. For interpreters with their own
      obmalloc state, it is heap allocated. Add free_obmalloc_arenas()
      which will free the obmalloc arenas and radix tree structures
      for interpreters with their own obmalloc state.
    - gh-55664: Add warning when creating type using a namespace
      dictionary with non-string keys. Patched by Daniel Urban and
      Furkan Onder.
    - gh-104530: Use native Win32 condition variables.
  - Library
    - gh-115392: Fix a bug in doctest where incorrect line numbers
      would be reported for decorated functions.
    - gh-114563: Fix several format() bugs when using the C
      implementation of Decimal: * memory leak in some rare cases when
      using the z format option (coerce negative 0) * incorrect output
      when applying the z format option to type F (fixed-point with
      capital NAN / INF) * incorrect output when applying the # format
      option (alternate form)
    - gh-102840: Fix confused traceback when floordiv, mod, or divmod
      operations happens between instances of fractions.Fraction and
      complex.
    - gh-115165: Most exceptions are now ignored when attempting to
      set the __orig_class__ attribute on objects returned when
      calling typing generic aliases (including generic aliases
      created using typing.Annotated). Previously only AttributeError
      was ignored. Patch by Dave Shawley.
    - gh-112903: Fix “issubclass() arg 1 must be a class” errors in
      certain cases of multiple inheritance with generic aliases
      (regression in early 3.13 alpha releases).
    - gh-115133: Fix tests for XMLPullParser with Expat 2.6.0.
    - gh-115059: io.BufferedRandom.read1() now flushes the underlying
      write buffer.
    - gh-79382: Trailing ** no longer allows to match files and
      non-existing paths in recursive glob().
    - gh-67837: Avoid race conditions in the creation of directories
      during concurrent extraction in tarfile and zipfile.
    - gh-115060: Speed up pathlib.Path.glob() by removing redundant
      regex matching.
    - gh-97928: Partially revert the behavior of tkinter.Text.count().
      By default it preserves the behavior of older Python versions,
      except that setting wantobjects to 0 no longer has effect. Add a
      new parameter return_ints: specifying return_ints=True makes
      Text.count() always returning the single count as an integer
      instead of a 1-tuple or None.
    - gh-114628: When csv.Error is raised when handling TypeError, do
      not print the TypeError traceback.
    - gh-85984: Added _POSIX_VDISABLE from C’s <unistd.h> to termios.
    - gh-114965: Update bundled pip to 24.0
    - gh-114959: tarfile no longer ignores errors when trying to
      extract a directory on top of a file.
    - gh-114894: Add array.array.clear().
    - gh-114071: Support tuple subclasses using auto() for enum member
      value.
    - gh-109475: Fix support of explicit option value “–” in argparse
      (e.g. --option=--).
    - gh-49766: Fix date-datetime comparison. Now the special
      comparison methods like __eq__ and __lt__ return NotImplemented
      if one of comparands is date and other is datetime instead of
      ignoring the time part and the time zone or forcefully return
      “not equal” or raise TypeError. It makes comparison of date and
      datetime subclasses more symmetric and allows to change the
      default behavior by overriding the special comparison methods in
      subclasses.
    - gh-110190: Fix ctypes structs with array on Windows ARM64
      platform by setting MAX_STRUCT_SIZE to 32 in stgdict. Patch by
      Diego Russo
    - gh-114678: Ensure that deprecation warning for ‘N’ specifier in
      Decimal format is not raised for cases where ‘N’ appears in
      other places in the format specifier. Based on patch by Stefan
      Krah.
    - gh-70303: Return both files and directories from
      pathlib.Path.glob() if a pattern ends with “**”. Previously only
      directories were returned.
    - gh-109653: Improve import time of importlib.metadata and
      email.utils.
    - gh-113280: Fix a leak of open socket in rare cases when error
      occurred in ssl.SSLSocket creation.
    - gh-77749: email.policy.EmailPolicy.fold() now always encodes
      non-ASCII characters in headers if utf8 is false.
    - gh-83383: Synchronization of the dbm.dumb database is now no-op
      if there was no modification since opening or last
      synchronization. The directory file for a newly created empty
      dbm.dumb database is now created immediately after opening
      instead of deferring this until synchronizing or closing.
    - gh-91602: Add filter keyword-only parameter to
      sqlite3.Connection.iterdump() for filtering database objects to
      dump. Patch by Mariusz Felisiak.
    - gh-112451: Prohibit subclassing pure-Python datetime.timezone.
      This is consistent with C-extension implementation. Patch by
      Mariusz Felisiak.
    - gh-69893: Add the close() method for the iterator returned by
      xml.etree.ElementTree.iterparse().
    - gh-109653: Reduce the import time of threading module by ~50%.
      Patch by Daniel Hollas.
    - gh-114492: Make the result of termios.tcgetattr() reproducible
      on Alpine Linux. Previously it could leave a random garbage in
      some fields.
    - gh-114315: Make threading.Lock a real class, not a factory
      function. Add __new__ to _thread.lock type.
    - gh-100414: Add dbm.sqlite3 as a backend to dbm, and make it the
      new default dbm backend. Patch by Raymond Hettinger and Erlend
      E. Aasland.
    - gh-113267: Revert changes in gh-106584 which made calls of
      TestResult methods startTest() and stopTest() unbalanced.
    - gh-75128: Ignore an OSError in
      asyncio.BaseEventLoop.create_server() when IPv6 is available but
      the interface cannot actually support it.
    - gh-114423: _DummyThread entries in threading._active are now
      automatically removed when the related thread dies.
    - gh-114257: Dismiss the FileNotFound error in
      ctypes.util.find_library() and just return None on Linux.
    - gh-114321: Expose more platform specific constants in the fcntl
      module on Linux, macOS, FreeBSD and NetBSD.
    - gh-114328: The tty.setcbreak() and new tty.cfmakecbreak() no
      longer clears the terminal input ICRLF flag. This fixes a
      regression introduced in 3.12 that no longer matched how OSes
      define cbreak mode in their stty(1) manual pages.
    - gh-114281: Remove type hints from Lib/asyncio/staggered.py. The
      annotations in the typeshed project should be used instead.
    - gh-101438: Avoid reference cycle in ElementTree.iterparse. The
      iterator returned by ElementTree.iterparse may hold on to a file
      descriptor. The reference cycle prevented prompt clean-up of the
      file descriptor if the returned iterator was not exhausted.
    - gh-114198: The signature for the __replace__ method on
      dataclasses now has the first argument named self, rather than
      obj.
    - gh-104522: OSError raised when run a subprocess now only has
      filename attribute set to cwd if the error was caused by a
      failed attempt to change the current directory.
    - gh-114149: Enum: correctly handle tuple subclasses in custom
      __new__.
    - gh-83648: Support deprecation of options, positional arguments
      and subcommands in argparse.
    - gh-114087: Speed up dataclasses.asdict up to 1.35x.
    - gh-109534: Fix a reference leak in
      asyncio.selector_events.BaseSelectorEventLoop when SSL
      handshakes fail. Patch contributed by Jamie Phan.
    - gh-79634: Accept path-like objects as patterns in
      pathlib.Path.glob() and rglob().
    - gh-112202: Ensure that a asyncio.Condition.notify() call does
      not get lost if the awakened Task is simultaneously cancelled or
      encounters any other error.
    - gh-113951: Fix the behavior of tag_unbind() methods of
      tkinter.Text and tkinter.Canvas classes with three arguments.
      Previously, widget.tag_unbind(tag, sequence, funcid) destroyed
      the current binding for sequence, leaving sequence unbound, and
      deleted the funcid command. Now it removes only funcid from the
      binding for sequence, keeping other commands, and deletes the
      funcid command. It leaves sequence unbound only if funcid was
      the last bound command.
    - gh-97959: Fix rendering class methods, bound methods, method and
      function aliases in pydoc. Class methods no longer have “method
      of builtins.type instance” note. Corresponding notes are now
      added for class and unbound methods. Method and function aliases
      now have references to the module or the class where the origin
      was defined if it differs from the current. Bound methods are
      now listed in the static methods section. Methods of builtin
      classes are now supported as well as methods of Python classes.
    - gh-113796: Add more validation checks in the csv.Dialect
      constructor. ValueError is now raised if the same character is
      used in different roles.
    - gh-113732: Fix support of QUOTE_NOTNULL and QUOTE_STRINGS in
      csv.reader().
    - gh-113225: Speed up pathlib.Path.walk() by using
      os.DirEntry.path where possible.
    - gh-89039: When replace() method is called on a subclass of
      datetime, date or time, properly call derived constructor.
      Previously, only the base class’s constructor was called.
    - Also, make sure to pass non-zero fold values when creating
      subclasses in various methods. Previously, fold was silently
      ignored.
    - gh-112919: Speed-up datetime.datetime.replace(),
      datetime.date.replace() and datetime.time.replace().
    - gh-59013: Set breakpoint on the first executable line of the
      function, instead of the line of function definition when the
      user do break func using pdb
    - gh-112343: Improve handling of pdb convenience variables to
      avoid replacing string contents.
    - gh-112240: Add option to calendar module CLI to specify the
      weekday to start each week. Patch by Steven Ward.
    - gh-111741: Recognise image/webp as a standard format in the
      mimetypes module.
    - gh-43457: Fix the tkinter widget method wm_attributes(). It now
      accepts the attribute name without the minus prefix to get
      window attributes and allows to specify attributes and values to
      set as keyword arguments. Add new optional keyword argument
      return_python_dict: calling
      w.wm_attributes(return_python_dict=True) returns the attributes
      as a dict instead of a tuple. Calling w.wm_attributes() now
      returns a tuple instead of string if wantobjects was set to 0.
    - gh-82626: Many functions now emit a warning if a boolean value
      is passed as a file descriptor argument.
    - gh-111051: Added check for file modification during debugging
      with pdb
    - gh-110345: Show the Tcl/Tk patchlevel (rather than version) in
      tkinter._test().
    - gh-38807: Fix race condition in trace. Instead of checking if a
      directory exists and creating it, directly call os.makedirs()
      with the kwarg exist_ok=True.
    - gh-75705: Set unixfrom envelope in mailbox.mbox and
      mailbox.MMDF.
    - gh-106233: Fix stacklevel in InvalidTZPathWarning during
      zoneinfo module import.
    - gh-105102: Allow ctypes.Union to be nested in ctypes.Structure
      when the system endianness is the opposite of the classes.
    - gh-104282: Fix null pointer dereference in
      lzma._decode_filter_properties() due to improper handling of BCJ
      filters with properties of zero length. Patch by Radislav
      Chugunov.
    - gh-96471: Add queue.Queue termination with shutdown().
    - gh-101599: Changed argparse flag options formatting to remove
      redundancy.
    - gh-85984: Add POSIX pseudo-terminal functions os.posix_openpt(),
      os.grantpt(), os.unlockpt(), and os.ptsname().
    - gh-102512: When os.fork() is called from a foreign thread (aka
      _DummyThread), the type of the thread in a child process is
      changed to _MainThread. Also changed its name and daemonic
      status, it can be now joined.
    - gh-88569: Add os.path.isreserved(), which identifies reserved
      pathnames such as “NUL”, “AUX” and “CON”. This function is only
      available on Windows.
    - Deprecate pathlib.PurePath.is_reserved().
    - bpo-38364: The inspect functions isgeneratorfunction,
      iscoroutinefunction, isasyncgenfunction now support
      functools.partialmethod wrapped functions the same way they
      support functools.partial.
  - Documentation
    - gh-115233: Fix an example for LoggerAdapter in the Logging
      Cookbook.
    - gh-114123: Move the csv module docstring to the csv module
      instead of reexporting it from the internal _csv module, and
      remove __doc__ from csv.__all__.
    - Move csv.__version__ to the csv module instead of reexporting it
      from the internal _csv module, and remove __version__ from
      csv.__all__.  Test- s
    - gh-114099: Added test exclusions required to run the test suite
      on iOS.
    - gh-105089: Fix
      test.test_zipfile.test_core.TestWithDirectory.test_create_directory_with_write
      test in AIX by doing a bitwise AND of 0xFFFF on mode , so that
      it will be in sync with zinfo.external_attr Buil- d
    - gh-115167: Avoid vendoring vcruntime140_threads.dll when
      building with Visual Studio 2022 version 17.8.
    - gh-113632: Promote WASI to a tier 2 platform and drop Emscripten
      from tier 3 in configure.ac.
    - gh-114099: configure and Makefile were refactored to accomodate
      framework builds on Apple platforms other than macOS.
    - gh-114875: Add getgrent() as a prerequisite for building the grp
      module.  Wind- ows
    - gh-115049: Fixes py.exe launcher failing when run as users
      without user profiles.
    - gh-115009: Update Windows installer to use SQLite 3.45.1.
    - gh-109991: Update Windows build to use OpenSSL 3.0.13.
    - gh-111239: Update Windows builds to use zlib v1.3.1.
    - gh-100107: The py.exe launcher will no longer attempt to run the
      Microsoft Store redirector when launching a script containing a
      /usr/bin/env shebang
    - gh-112984: Adds free-threaded binaries to Windows installer as
      an optional component.
    - gh-89240: Allows multiprocessing to create pools of greater than
      62 processes.
  - IDLE
    - gh-96905: In idlelib code, stop redefining built-ins ‘dict’ and
      ‘object’.
    - gh-103820: Revise IDLE bindings so that events from mouse button
      4/5 on non-X11 windowing systems (i.e. Win32 and Aqua) are not
      mistaken for scrolling.
  - Tools/Demos
    - gh-113516: Don’t set LDSHARED when building for WASI.
    - gh-109991: Update GitHub CI workflows to use OpenSSL 3.0.13 and
      multissltests to use 1.1.1w, 3.0.13, 3.1.5, and 3.2.1.
    - gh-115015: Fix a bug in Argument Clinic that generated incorrect
      code for methods with no parameters that use the METH_METHOD |
      METH_FASTCALL | METH_KEYWORDS calling convention. Only the
      positional parameter count was checked; any keyword argument
      passed would be silently accepted.
  - C API
    - gh-111140: Adds PyLong_AsNativeBytes(), PyLong_FromNativeBytes()
      and PyLong_FromUnsignedNativeBytes() functions.
    - gh-114685: PyBuffer_FillInfo() now raises a SystemError if
      called with PyBUF_READ or PyBUF_WRITE as flags. These flags
      should only be used with the PyMemoryView_* C API.
    - gh-114685: PyObject_GetBuffer() now raises a SystemError if
      called with PyBUF_READ or PyBUF_WRITE as flags. These flags
      should only be used with the PyMemoryView_* C API.
    - gh-114626: Add PyCFunctionFast and PyCFunctionFastWithKeywords
      typedefs (identical to the existing _PyCFunctionFast and
      _PyCFunctionFastWithKeywords typedefs, just without a leading _
      prefix).
    - gh-114329: Add PyList_GetItemRef(), which is similar to
      PyList_GetItem() but returns a strong reference instead of a
      borrowed reference.
    - gh-110850: Add PyTime C API:
      * PyTime_t type.
      * PyTime_MIN and PyTime_MAX constants.
      * PyTime_AsSecondsDouble(), PyTime_Monotonic(), PyTime_PerfCounter(), and PyTime_Time() functions.
    - gh-112066: Add PyDict_SetDefaultRef(): insert a key and value
      into a dictionary if the key is not already present. This is
      similar to dict.setdefault(), but returns an integer value
      indicating if the key was already present. It is also similar to
      PyDict_SetDefault(), but returns a strong reference instead of a
      borrowed reference.

OBS-URL: https://build.opensuse.org/request/show/1155094
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=7
2024-03-05 11:50:09 +00:00
8e49b262ea Accepting request 1148356 from home:mcepl:branches:devel:languages:python:Factory
- Add gh115133-XMLPullParserTest-fail.patch to make
  Python building with the current libexpat 2.6.0
  (gh#python/cpython#115133).
- Switch to %%autopatch. Let’s try it as an experiment, and if we
  need conditional patch, we should put condition inside of it.
- Remove double definition of /usr/bin/idle%%{version} in
  %%files.

OBS-URL: https://build.opensuse.org/request/show/1148356
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=6
2024-02-20 22:04:57 +00:00
edaef6893c - Fix package adding _xxinterpqueues and pathlib dir
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=5
2024-02-08 18:11:36 +00:00
5eff57c396 - Fix build, NEWS.txt doesn't exists anymore
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=4
2024-02-08 08:56:56 +00:00
cf67592415 - Update to 3.13.0a3
- Security
    - gh-113659: Skip .pth files with names starting with a dot or
      hidden file attribute.
    - gh-112302: Created a Software Bill-of-Materials document and
      tooling for tracking dependencies.
  - Core and Builtins
    - gh-107901: Compiler duplicates basic blocks that have an eval
      breaker check, no line number, and multiple predecessors.
    - gh-107901: A jump leaving an exception handler back to normal
      code no longer checks the eval breaker.
    - gh-113655: Set the C recursion limit to 4000 on Windows, and
      10000 on Linux/OSX. This seems to be near the sweet spot to
      maintain safety, but not compromise backwards compatibility.
    - gh-113710: Add typed stack effects to the interpreter DSL, along
      with various instruction annotations.
    - gh-77046: On Windows, file descriptors wrapping Windows handles
      are now created non inheritable by default (PEP 446). Patch by
      Zackery Spytz and Victor Stinner.
    - gh-113853: Guarantee that all executors make progress. This then
      guarantees that tier 2 execution always makes progress.
    - gh-113753: Fix an issue where the finalizer of PyAsyncGenASend
      objects might not be called if they were allocated from a free
      list.
    - gh-107901: Compiler changed so that synthetic jumps which are
      not at loop end no longer check the eval breaker.
    - gh-113703: Fix a regression in the codeop module that was
      causing it to incorrectly identify incomplete f-strings. Patch
      by Pablo Galindo
    - gh-89811: Check for a valid tp_version_tag before performing

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=3
2024-02-08 08:18:19 +00:00
9bce840ac0 - Update to 3.13.0a2:
Python 3.13.0 alpha 2¶
  - Core and Builtins:
    - Don’t include comments in f-string debug expressions. Patch
      by Pablo Galindo
    - Slightly optimize the Tier 2 (uop) interpreter by only
      loading oparg and operand when needed. Also double the
      trace size limit again, to 512 this time.
    - Change docstrings of __dict__ and __weakref__.
    - Lower the max parser stack depth to 1000 under WASI debug
      builds.
    - When Python is built in debug mode, set the C recursion
      limit to 500 instead of 1500. A debug build is likely built
      with low optimization level which implies higher stack
      memory usage than a release build. Patch by Victor Stinner.
    - Enable translating unspecialized FOR_ITER to Tier 2.
    - Make hashlib related modules thread-safe without the GIL
    - Deprecate assignment to a function’s __code__ field when
      the new code object is of a mismatched type (e.g., from a
      generator to a plain function).
    - Raise exception if frame.clear() is called on a suspended
      frame.
    - Implement native thread ids for GNU KFreeBSD.
    - Use exponential backoff to reduce the number of failed tier
      2 optimization attempts by over 99%.
    - Joining a thread now ensures the underlying OS thread has
      exited. This is required for safer fork() in multi-threaded
      processes.
    - Make sure that tier 2 traces are de-optimized if the code
      is instrumented

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=2
2023-11-25 16:20:58 +00:00
c9d84fa1ca Accepting request 1117792 from home:dgarcia:branches:devel:languages:python:Factory
Python 3.13 alpha package

OBS-URL: https://build.opensuse.org/request/show/1117792
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=1
2023-10-14 13:31:04 +00:00
19 changed files with 1404 additions and 564 deletions

1
.gitattributes vendored
View File

@@ -21,3 +21,4 @@
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text
*.changes merge=merge-changes

6
.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@
.osc
*.obscpio
*.osc
_build.*
.pbuild
python313-*-build/

View File

@@ -1,247 +0,0 @@
From 9043edabc7e2f0dd655146e0a4571e2a0b2906af Mon Sep 17 00:00:00 2001
From: Serhiy Storchaka <storchaka@gmail.com>
Date: Fri, 13 Jun 2025 19:57:48 +0300
Subject: [PATCH] gh-135462: Fix quadratic complexity in processing special
input in HTMLParser (GH-135464)
End-of-file errors are now handled according to the HTML5 specs --
comments and declarations are automatically closed, tags are ignored.
(cherry picked from commit 6eb6c5dbfb528bd07d77b60fd71fd05d81d45c41)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
---
Lib/html/parser.py | 41 +++-
Lib/test/test_htmlparser.py | 97 +++++++---
Misc/NEWS.d/next/Security/2025-06-13-15-55-22.gh-issue-135462.KBeJpc.rst | 4
3 files changed, 111 insertions(+), 31 deletions(-)
create mode 100644 Misc/NEWS.d/next/Security/2025-06-13-15-55-22.gh-issue-135462.KBeJpc.rst
Index: Python-3.13.5/Lib/html/parser.py
===================================================================
--- Python-3.13.5.orig/Lib/html/parser.py 2025-06-11 17:36:57.000000000 +0200
+++ Python-3.13.5/Lib/html/parser.py 2025-07-02 16:49:52.020175099 +0200
@@ -27,6 +27,7 @@
attr_charref = re.compile(r'&(#[0-9]+|#[xX][0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]*)[;=]?')
starttagopen = re.compile('<[a-zA-Z]')
+endtagopen = re.compile('</[a-zA-Z]')
piclose = re.compile('>')
commentclose = re.compile(r'--\s*>')
# Note:
@@ -195,7 +196,7 @@
k = self.parse_pi(i)
elif startswith("<!", i):
k = self.parse_html_declaration(i)
- elif (i + 1) < n:
+ elif (i + 1) < n or end:
self.handle_data("<")
k = i + 1
else:
@@ -203,17 +204,35 @@
if k < 0:
if not end:
break
- k = rawdata.find('>', i + 1)
- if k < 0:
- k = rawdata.find('<', i + 1)
- if k < 0:
- k = i + 1
+ if starttagopen.match(rawdata, i): # < + letter
+ pass
+ elif startswith("</", i):
+ if i + 2 == n:
+ self.handle_data("</")
+ elif endtagopen.match(rawdata, i): # </ + letter
+ pass
+ else:
+ # bogus comment
+ self.handle_comment(rawdata[i+2:])
+ elif startswith("<!--", i):
+ j = n
+ for suffix in ("--!", "--", "-"):
+ if rawdata.endswith(suffix, i+4):
+ j -= len(suffix)
+ break
+ self.handle_comment(rawdata[i+4:j])
+ elif startswith("<![CDATA[", i):
+ self.unknown_decl(rawdata[i+3:])
+ elif rawdata[i:i+9].lower() == '<!doctype':
+ self.handle_decl(rawdata[i+2:])
+ elif startswith("<!", i):
+ # bogus comment
+ self.handle_comment(rawdata[i+2:])
+ elif startswith("<?", i):
+ self.handle_pi(rawdata[i+2:])
else:
- k += 1
- if self.convert_charrefs and not self.cdata_elem:
- self.handle_data(unescape(rawdata[i:k]))
- else:
- self.handle_data(rawdata[i:k])
+ raise AssertionError("we should not get here!")
+ k = n
i = self.updatepos(i, k)
elif startswith("&#", i):
match = charref.match(rawdata, i)
Index: Python-3.13.5/Lib/test/test_htmlparser.py
===================================================================
--- Python-3.13.5.orig/Lib/test/test_htmlparser.py 2025-06-11 17:36:57.000000000 +0200
+++ Python-3.13.5/Lib/test/test_htmlparser.py 2025-07-02 16:49:52.020821697 +0200
@@ -5,6 +5,7 @@
import unittest
from unittest.mock import patch
+from test import support
class EventCollector(html.parser.HTMLParser):
@@ -430,28 +431,34 @@
('data', '<'),
('starttag', 'bc<', [('a', None)]),
('endtag', 'html'),
- ('data', '\n<img src="URL>'),
- ('comment', '/img'),
- ('endtag', 'html<')])
+ ('data', '\n')])
def test_starttag_junk_chars(self):
+ self._run_check("<", [('data', '<')])
+ self._run_check("<>", [('data', '<>')])
+ self._run_check("< >", [('data', '< >')])
+ self._run_check("< ", [('data', '< ')])
self._run_check("</>", [])
+ self._run_check("<$>", [('data', '<$>')])
self._run_check("</$>", [('comment', '$')])
self._run_check("</", [('data', '</')])
- self._run_check("</a", [('data', '</a')])
+ self._run_check("</a", [])
+ self._run_check("</ a>", [('endtag', 'a')])
+ self._run_check("</ a", [('comment', ' a')])
self._run_check("<a<a>", [('starttag', 'a<a', [])])
self._run_check("</a<a>", [('endtag', 'a<a')])
- self._run_check("<!", [('data', '<!')])
- self._run_check("<a", [('data', '<a')])
- self._run_check("<a foo='bar'", [('data', "<a foo='bar'")])
- self._run_check("<a foo='bar", [('data', "<a foo='bar")])
- self._run_check("<a foo='>'", [('data', "<a foo='>'")])
- self._run_check("<a foo='>", [('data', "<a foo='>")])
+ self._run_check("<!", [('comment', '')])
+ self._run_check("<a", [])
+ self._run_check("<a foo='bar'", [])
+ self._run_check("<a foo='bar", [])
+ self._run_check("<a foo='>'", [])
+ self._run_check("<a foo='>", [])
self._run_check("<a$>", [('starttag', 'a$', [])])
self._run_check("<a$b>", [('starttag', 'a$b', [])])
self._run_check("<a$b/>", [('startendtag', 'a$b', [])])
self._run_check("<a$b >", [('starttag', 'a$b', [])])
self._run_check("<a$b />", [('startendtag', 'a$b', [])])
+ self._run_check("</a$b>", [('endtag', 'a$b')])
def test_slashes_in_starttag(self):
self._run_check('<a foo="var"/>', [('startendtag', 'a', [('foo', 'var')])])
@@ -576,21 +583,50 @@
for html, expected in data:
self._run_check(html, expected)
- def test_EOF_in_comments_or_decls(self):
+ def test_eof_in_comments(self):
data = [
- ('<!', [('data', '<!')]),
- ('<!-', [('data', '<!-')]),
- ('<!--', [('data', '<!--')]),
- ('<![', [('data', '<![')]),
- ('<![CDATA[', [('data', '<![CDATA[')]),
- ('<![CDATA[x', [('data', '<![CDATA[x')]),
- ('<!DOCTYPE', [('data', '<!DOCTYPE')]),
- ('<!DOCTYPE HTML', [('data', '<!DOCTYPE HTML')]),
+ ('<!--', [('comment', '')]),
+ ('<!---', [('comment', '')]),
+ ('<!----', [('comment', '')]),
+ ('<!-----', [('comment', '-')]),
+ ('<!------', [('comment', '--')]),
+ ('<!----!', [('comment', '')]),
+ ('<!---!', [('comment', '-!')]),
+ ('<!---!>', [('comment', '-!>')]),
+ ('<!--foo', [('comment', 'foo')]),
+ ('<!--foo-', [('comment', 'foo')]),
+ ('<!--foo--', [('comment', 'foo')]),
+ ('<!--foo--!', [('comment', 'foo')]),
+ ('<!--<!--', [('comment', '<!')]),
+ ('<!--<!--!', [('comment', '<!')]),
]
for html, expected in data:
self._run_check(html, expected)
+
+ def test_eof_in_declarations(self):
+ data = [
+ ('<!', [('comment', '')]),
+ ('<!-', [('comment', '-')]),
+ ('<![', [('comment', '[')]),
+ ('<![CDATA[', [('unknown decl', 'CDATA[')]),
+ ('<![CDATA[x', [('unknown decl', 'CDATA[x')]),
+ ('<![CDATA[x]', [('unknown decl', 'CDATA[x]')]),
+ ('<![CDATA[x]]', [('unknown decl', 'CDATA[x]]')]),
+ ('<!DOCTYPE', [('decl', 'DOCTYPE')]),
+ ('<!DOCTYPE ', [('decl', 'DOCTYPE ')]),
+ ('<!DOCTYPE html', [('decl', 'DOCTYPE html')]),
+ ('<!DOCTYPE html ', [('decl', 'DOCTYPE html ')]),
+ ('<!DOCTYPE html PUBLIC', [('decl', 'DOCTYPE html PUBLIC')]),
+ ('<!DOCTYPE html PUBLIC "foo', [('decl', 'DOCTYPE html PUBLIC "foo')]),
+ ('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "foo',
+ [('decl', 'DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "foo')]),
+ ]
+ for html, expected in data:
+ self._run_check(html, expected)
+
def test_bogus_comments(self):
- html = ('<! not really a comment >'
+ html = ('<!ELEMENT br EMPTY>'
+ '<! not really a comment >'
'<! not a comment either -->'
'<! -- close enough -->'
'<!><!<-- this was an empty comment>'
@@ -604,6 +640,7 @@
'<![CDATA]]>' # required '[' after CDATA
)
expected = [
+ ('comment', 'ELEMENT br EMPTY'),
('comment', ' not really a comment '),
('comment', ' not a comment either --'),
('comment', ' -- close enough --'),
@@ -684,6 +721,26 @@
('endtag', 'a'), ('data', ' bar & baz')]
)
+ @support.requires_resource('cpu')
+ def test_eof_no_quadratic_complexity(self):
+ # Each of these examples used to take about an hour.
+ # Now they take a fraction of a second.
+ def check(source):
+ parser = html.parser.HTMLParser()
+ parser.feed(source)
+ parser.close()
+ n = 120_000
+ check("<a " * n)
+ check("<a a=" * n)
+ check("</a " * 14 * n)
+ check("</a a=" * 11 * n)
+ check("<!--" * 4 * n)
+ check("<!" * 60 * n)
+ check("<?" * 19 * n)
+ check("</$" * 15 * n)
+ check("<![CDATA[" * 9 * n)
+ check("<!doctype" * 35 * n)
+
class AttributesTestCase(TestCaseBase):
Index: Python-3.13.5/Misc/NEWS.d/next/Security/2025-06-13-15-55-22.gh-issue-135462.KBeJpc.rst
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ Python-3.13.5/Misc/NEWS.d/next/Security/2025-06-13-15-55-22.gh-issue-135462.KBeJpc.rst 2025-07-02 16:49:52.021124951 +0200
@@ -0,0 +1,4 @@
+Fix quadratic complexity in processing specially crafted input in
+:class:`html.parser.HTMLParser`. End-of-file errors are now handled according
+to the HTML5 specs -- comments and declarations are automatically closed,
+tags are ignored.

View File

@@ -0,0 +1,373 @@
From 4fc21099da844f85b799d3c4c8b1b5936faa4cdc Mon Sep 17 00:00:00 2001
From: Serhiy Storchaka <storchaka@gmail.com>
Date: Fri, 31 Oct 2025 15:49:51 +0200
Subject: [PATCH 1/2] [3.13] gh-136065: Fix quadratic complexity in
os.path.expandvars() (GH-134952) (cherry picked from commit
f029e8db626ddc6e3a3beea4eff511a71aaceb5c)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
---
Lib/ntpath.py | 126 +++-------
Lib/posixpath.py | 43 +--
Lib/test/test_genericpath.py | 21 +
Lib/test/test_ntpath.py | 22 +
Misc/NEWS.d/next/Security/2025-05-30-22-33-27.gh-issue-136065.bu337o.rst | 1
5 files changed, 96 insertions(+), 117 deletions(-)
create mode 100644 Misc/NEWS.d/next/Security/2025-05-30-22-33-27.gh-issue-136065.bu337o.rst
Index: Python-3.13.9/Lib/ntpath.py
===================================================================
--- Python-3.13.9.orig/Lib/ntpath.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Lib/ntpath.py 2025-11-14 01:47:08.155405483 +0100
@@ -400,17 +400,23 @@
# XXX With COMMAND.COM you can use any characters in a variable name,
# XXX except '^|<>='.
+_varpattern = r"'[^']*'?|%(%|[^%]*%?)|\$(\$|[-\w]+|\{[^}]*\}?)"
+_varsub = None
+_varsubb = None
+
def expandvars(path):
"""Expand shell variables of the forms $var, ${var} and %var%.
Unknown variables are left unchanged."""
path = os.fspath(path)
+ global _varsub, _varsubb
if isinstance(path, bytes):
if b'$' not in path and b'%' not in path:
return path
- import string
- varchars = bytes(string.ascii_letters + string.digits + '_-', 'ascii')
- quote = b'\''
+ if not _varsubb:
+ import re
+ _varsubb = re.compile(_varpattern.encode(), re.ASCII).sub
+ sub = _varsubb
percent = b'%'
brace = b'{'
rbrace = b'}'
@@ -419,94 +425,44 @@
else:
if '$' not in path and '%' not in path:
return path
- import string
- varchars = string.ascii_letters + string.digits + '_-'
- quote = '\''
+ if not _varsub:
+ import re
+ _varsub = re.compile(_varpattern, re.ASCII).sub
+ sub = _varsub
percent = '%'
brace = '{'
rbrace = '}'
dollar = '$'
environ = os.environ
- res = path[:0]
- index = 0
- pathlen = len(path)
- while index < pathlen:
- c = path[index:index+1]
- if c == quote: # no expansion within single quotes
- path = path[index + 1:]
- pathlen = len(path)
- try:
- index = path.index(c)
- res += c + path[:index + 1]
- except ValueError:
- res += c + path
- index = pathlen - 1
- elif c == percent: # variable or '%'
- if path[index + 1:index + 2] == percent:
- res += c
- index += 1
- else:
- path = path[index+1:]
- pathlen = len(path)
- try:
- index = path.index(percent)
- except ValueError:
- res += percent + path
- index = pathlen - 1
- else:
- var = path[:index]
- try:
- if environ is None:
- value = os.fsencode(os.environ[os.fsdecode(var)])
- else:
- value = environ[var]
- except KeyError:
- value = percent + var + percent
- res += value
- elif c == dollar: # variable or '$$'
- if path[index + 1:index + 2] == dollar:
- res += c
- index += 1
- elif path[index + 1:index + 2] == brace:
- path = path[index+2:]
- pathlen = len(path)
- try:
- index = path.index(rbrace)
- except ValueError:
- res += dollar + brace + path
- index = pathlen - 1
- else:
- var = path[:index]
- try:
- if environ is None:
- value = os.fsencode(os.environ[os.fsdecode(var)])
- else:
- value = environ[var]
- except KeyError:
- value = dollar + brace + var + rbrace
- res += value
- else:
- var = path[:0]
- index += 1
- c = path[index:index + 1]
- while c and c in varchars:
- var += c
- index += 1
- c = path[index:index + 1]
- try:
- if environ is None:
- value = os.fsencode(os.environ[os.fsdecode(var)])
- else:
- value = environ[var]
- except KeyError:
- value = dollar + var
- res += value
- if c:
- index -= 1
+
+ def repl(m):
+ lastindex = m.lastindex
+ if lastindex is None:
+ return m[0]
+ name = m[lastindex]
+ if lastindex == 1:
+ if name == percent:
+ return name
+ if not name.endswith(percent):
+ return m[0]
+ name = name[:-1]
else:
- res += c
- index += 1
- return res
+ if name == dollar:
+ return name
+ if name.startswith(brace):
+ if not name.endswith(rbrace):
+ return m[0]
+ name = name[1:-1]
+
+ try:
+ if environ is None:
+ return os.fsencode(os.environ[os.fsdecode(name)])
+ else:
+ return environ[name]
+ except KeyError:
+ return m[0]
+
+ return sub(repl, path)
# Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A\B.
Index: Python-3.13.9/Lib/posixpath.py
===================================================================
--- Python-3.13.9.orig/Lib/posixpath.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Lib/posixpath.py 2025-11-14 01:47:08.155728503 +0100
@@ -284,42 +284,41 @@
# This expands the forms $variable and ${variable} only.
# Non-existent variables are left unchanged.
-_varprog = None
-_varprogb = None
+_varpattern = r'\$(\w+|\{[^}]*\}?)'
+_varsub = None
+_varsubb = None
def expandvars(path):
"""Expand shell variables of form $var and ${var}. Unknown variables
are left unchanged."""
path = os.fspath(path)
- global _varprog, _varprogb
+ global _varsub, _varsubb
if isinstance(path, bytes):
if b'$' not in path:
return path
- if not _varprogb:
+ if not _varsubb:
import re
- _varprogb = re.compile(br'\$(\w+|\{[^}]*\})', re.ASCII)
- search = _varprogb.search
+ _varsubb = re.compile(_varpattern.encode(), re.ASCII).sub
+ sub = _varsubb
start = b'{'
end = b'}'
environ = getattr(os, 'environb', None)
else:
if '$' not in path:
return path
- if not _varprog:
+ if not _varsub:
import re
- _varprog = re.compile(r'\$(\w+|\{[^}]*\})', re.ASCII)
- search = _varprog.search
+ _varsub = re.compile(_varpattern, re.ASCII).sub
+ sub = _varsub
start = '{'
end = '}'
environ = os.environ
- i = 0
- while True:
- m = search(path, i)
- if not m:
- break
- i, j = m.span(0)
- name = m.group(1)
- if name.startswith(start) and name.endswith(end):
+
+ def repl(m):
+ name = m[1]
+ if name.startswith(start):
+ if not name.endswith(end):
+ return m[0]
name = name[1:-1]
try:
if environ is None:
@@ -327,13 +326,11 @@
else:
value = environ[name]
except KeyError:
- i = j
+ return m[0]
else:
- tail = path[j:]
- path = path[:i] + value
- i = len(path)
- path += tail
- return path
+ return value
+
+ return sub(repl, path)
# Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A/B.
Index: Python-3.13.9/Lib/test/test_genericpath.py
===================================================================
--- Python-3.13.9.orig/Lib/test/test_genericpath.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Lib/test/test_genericpath.py 2025-11-14 01:47:08.157575687 +0100
@@ -7,9 +7,9 @@
import sys
import unittest
import warnings
-from test.support import (
- is_apple, is_emscripten, os_helper, warnings_helper
-)
+from test import support
+from test.support import os_helper, is_emscripten
+from test.support import warnings_helper
from test.support.script_helper import assert_python_ok
from test.support.os_helper import FakePath
@@ -446,6 +446,19 @@
os.fsencode('$bar%s bar' % nonascii))
check(b'$spam}bar', os.fsencode('%s}bar' % nonascii))
+ @support.requires_resource('cpu')
+ def test_expandvars_large(self):
+ expandvars = self.pathmodule.expandvars
+ with os_helper.EnvironmentVarGuard() as env:
+ env.clear()
+ env["A"] = "B"
+ n = 100_000
+ self.assertEqual(expandvars('$A'*n), 'B'*n)
+ self.assertEqual(expandvars('${A}'*n), 'B'*n)
+ self.assertEqual(expandvars('$A!'*n), 'B!'*n)
+ self.assertEqual(expandvars('${A}A'*n), 'BA'*n)
+ self.assertEqual(expandvars('${'*10*n), '${'*10*n)
+
def test_abspath(self):
self.assertIn("foo", self.pathmodule.abspath("foo"))
with warnings.catch_warnings():
@@ -503,7 +516,7 @@
# directory (when the bytes name is used).
and sys.platform not in {
"win32", "emscripten", "wasi"
- } and not is_apple
+ } and not support.is_apple
):
name = os_helper.TESTFN_UNDECODABLE
elif os_helper.TESTFN_NONASCII:
Index: Python-3.13.9/Lib/test/test_ntpath.py
===================================================================
--- Python-3.13.9.orig/Lib/test/test_ntpath.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Lib/test/test_ntpath.py 2025-11-14 01:47:08.156225429 +0100
@@ -8,8 +8,7 @@
import warnings
from ntpath import ALLOW_MISSING
from test import support
-from test.support import cpython_only, os_helper
-from test.support import TestFailed, is_emscripten
+from test.support import os_helper, is_emscripten
from test.support.os_helper import FakePath
from test import test_genericpath
from tempfile import TemporaryFile
@@ -59,7 +58,7 @@
fn = fn.replace("\\", "\\\\")
gotResult = eval(fn)
if wantResult != gotResult and _norm(wantResult) != _norm(gotResult):
- raise TestFailed("%s should return: %s but returned: %s" \
+ raise support.TestFailed("%s should return: %s but returned: %s" \
%(str(fn), str(wantResult), str(gotResult)))
# then with bytes
@@ -75,7 +74,7 @@
warnings.simplefilter("ignore", DeprecationWarning)
gotResult = eval(fn)
if _norm(wantResult) != _norm(gotResult):
- raise TestFailed("%s should return: %s but returned: %s" \
+ raise support.TestFailed("%s should return: %s but returned: %s" \
%(str(fn), str(wantResult), repr(gotResult)))
@@ -1022,6 +1021,19 @@
check('%spam%bar', '%sbar' % nonascii)
check('%{}%bar'.format(nonascii), 'ham%sbar' % nonascii)
+ @support.requires_resource('cpu')
+ def test_expandvars_large(self):
+ expandvars = ntpath.expandvars
+ with os_helper.EnvironmentVarGuard() as env:
+ env.clear()
+ env["A"] = "B"
+ n = 100_000
+ self.assertEqual(expandvars('%A%'*n), 'B'*n)
+ self.assertEqual(expandvars('%A%A'*n), 'BA'*n)
+ self.assertEqual(expandvars("''"*n + '%%'), "''"*n + '%')
+ self.assertEqual(expandvars("%%"*n), "%"*n)
+ self.assertEqual(expandvars("$$"*n), "$"*n)
+
def test_expanduser(self):
tester('ntpath.expanduser("test")', 'test')
@@ -1440,7 +1452,7 @@
self.assertTrue(os.path.exists(r"\\.\CON"))
@unittest.skipIf(sys.platform != 'win32', "Fast paths are only for win32")
- @cpython_only
+ @support.cpython_only
def test_fast_paths_in_use(self):
# There are fast paths of these functions implemented in posixmodule.c.
# Confirm that they are being used, and not the Python fallbacks in
Index: Python-3.13.9/Misc/NEWS.d/next/Security/2025-05-30-22-33-27.gh-issue-136065.bu337o.rst
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ Python-3.13.9/Misc/NEWS.d/next/Security/2025-05-30-22-33-27.gh-issue-136065.bu337o.rst 2025-11-14 01:47:08.156533642 +0100
@@ -0,0 +1 @@
+Fix quadratic complexity in :func:`os.path.expandvars`.

View File

@@ -1,212 +0,0 @@
From fd29bcd380150035ef825b762d8cd085bdab6e53 Mon Sep 17 00:00:00 2001
From: Alexander Urieles <aeurielesn@users.noreply.github.com>
Date: Mon, 28 Jul 2025 17:37:26 +0200
Subject: [PATCH] gh-130577: tarfile now validates archives to ensure member
offsets are non-negative (GH-137027) (cherry picked from commit
7040aa54f14676938970e10c5f74ea93cd56aa38)
Co-authored-by: Alexander Urieles <aeurielesn@users.noreply.github.com>
Co-authored-by: Gregory P. Smith <greg@krypto.org>
---
Lib/tarfile.py | 3
Lib/test/test_tarfile.py | 156 ++++++++++
Misc/NEWS.d/next/Library/2025-07-23-00-35-29.gh-issue-130577.c7EITy.rst | 3
3 files changed, 162 insertions(+)
create mode 100644 Misc/NEWS.d/next/Library/2025-07-23-00-35-29.gh-issue-130577.c7EITy.rst
Index: Python-3.13.5/Lib/tarfile.py
===================================================================
--- Python-3.13.5.orig/Lib/tarfile.py 2025-08-01 22:13:44.185826095 +0200
+++ Python-3.13.5/Lib/tarfile.py 2025-08-01 22:13:45.524140183 +0200
@@ -1636,6 +1636,9 @@
"""Round up a byte count by BLOCKSIZE and return it,
e.g. _block(834) => 1024.
"""
+ # Only non-negative offsets are allowed
+ if count < 0:
+ raise InvalidHeaderError("invalid offset")
blocks, remainder = divmod(count, BLOCKSIZE)
if remainder:
blocks += 1
Index: Python-3.13.5/Lib/test/test_tarfile.py
===================================================================
--- Python-3.13.5.orig/Lib/test/test_tarfile.py 2025-06-11 17:36:57.000000000 +0200
+++ Python-3.13.5/Lib/test/test_tarfile.py 2025-08-01 22:13:45.524778259 +0200
@@ -50,6 +50,7 @@
xzname = os.path.join(TEMPDIR, "testtar.tar.xz")
tmpname = os.path.join(TEMPDIR, "tmp.tar")
dotlessname = os.path.join(TEMPDIR, "testtar")
+SPACE = b" "
sha256_regtype = (
"e09e4bc8b3c9d9177e77256353b36c159f5f040531bbd4b024a8f9b9196c71ce"
@@ -4578,6 +4579,161 @@
ar.extractall(self.testdir, filter='fully_trusted')
+class OffsetValidationTests(unittest.TestCase):
+ tarname = tmpname
+ invalid_posix_header = (
+ # name: 100 bytes
+ tarfile.NUL * tarfile.LENGTH_NAME
+ # mode, space, null terminator: 8 bytes
+ + b"000755" + SPACE + tarfile.NUL
+ # uid, space, null terminator: 8 bytes
+ + b"000001" + SPACE + tarfile.NUL
+ # gid, space, null terminator: 8 bytes
+ + b"000001" + SPACE + tarfile.NUL
+ # size, space: 12 bytes
+ + b"\xff" * 11 + SPACE
+ # mtime, space: 12 bytes
+ + tarfile.NUL * 11 + SPACE
+ # chksum: 8 bytes
+ + b"0011407" + tarfile.NUL
+ # type: 1 byte
+ + tarfile.REGTYPE
+ # linkname: 100 bytes
+ + tarfile.NUL * tarfile.LENGTH_LINK
+ # magic: 6 bytes, version: 2 bytes
+ + tarfile.POSIX_MAGIC
+ # uname: 32 bytes
+ + tarfile.NUL * 32
+ # gname: 32 bytes
+ + tarfile.NUL * 32
+ # devmajor, space, null terminator: 8 bytes
+ + tarfile.NUL * 6 + SPACE + tarfile.NUL
+ # devminor, space, null terminator: 8 bytes
+ + tarfile.NUL * 6 + SPACE + tarfile.NUL
+ # prefix: 155 bytes
+ + tarfile.NUL * tarfile.LENGTH_PREFIX
+ # padding: 12 bytes
+ + tarfile.NUL * 12
+ )
+ invalid_gnu_header = (
+ # name: 100 bytes
+ tarfile.NUL * tarfile.LENGTH_NAME
+ # mode, null terminator: 8 bytes
+ + b"0000755" + tarfile.NUL
+ # uid, null terminator: 8 bytes
+ + b"0000001" + tarfile.NUL
+ # gid, space, null terminator: 8 bytes
+ + b"0000001" + tarfile.NUL
+ # size, space: 12 bytes
+ + b"\xff" * 11 + SPACE
+ # mtime, space: 12 bytes
+ + tarfile.NUL * 11 + SPACE
+ # chksum: 8 bytes
+ + b"0011327" + tarfile.NUL
+ # type: 1 byte
+ + tarfile.REGTYPE
+ # linkname: 100 bytes
+ + tarfile.NUL * tarfile.LENGTH_LINK
+ # magic: 8 bytes
+ + tarfile.GNU_MAGIC
+ # uname: 32 bytes
+ + tarfile.NUL * 32
+ # gname: 32 bytes
+ + tarfile.NUL * 32
+ # devmajor, null terminator: 8 bytes
+ + tarfile.NUL * 8
+ # devminor, null terminator: 8 bytes
+ + tarfile.NUL * 8
+ # padding: 167 bytes
+ + tarfile.NUL * 167
+ )
+ invalid_v7_header = (
+ # name: 100 bytes
+ tarfile.NUL * tarfile.LENGTH_NAME
+ # mode, space, null terminator: 8 bytes
+ + b"000755" + SPACE + tarfile.NUL
+ # uid, space, null terminator: 8 bytes
+ + b"000001" + SPACE + tarfile.NUL
+ # gid, space, null terminator: 8 bytes
+ + b"000001" + SPACE + tarfile.NUL
+ # size, space: 12 bytes
+ + b"\xff" * 11 + SPACE
+ # mtime, space: 12 bytes
+ + tarfile.NUL * 11 + SPACE
+ # chksum: 8 bytes
+ + b"0010070" + tarfile.NUL
+ # type: 1 byte
+ + tarfile.REGTYPE
+ # linkname: 100 bytes
+ + tarfile.NUL * tarfile.LENGTH_LINK
+ # padding: 255 bytes
+ + tarfile.NUL * 255
+ )
+ valid_gnu_header = tarfile.TarInfo("filename").tobuf(tarfile.GNU_FORMAT)
+ data_block = b"\xff" * tarfile.BLOCKSIZE
+
+ def _write_buffer(self, buffer):
+ with open(self.tarname, "wb") as f:
+ f.write(buffer)
+
+ def _get_members(self, ignore_zeros=None):
+ with open(self.tarname, "rb") as f:
+ with tarfile.open(
+ mode="r", fileobj=f, ignore_zeros=ignore_zeros
+ ) as tar:
+ return tar.getmembers()
+
+ def _assert_raises_read_error_exception(self):
+ with self.assertRaisesRegex(
+ tarfile.ReadError, "file could not be opened successfully"
+ ):
+ self._get_members()
+
+ def test_invalid_offset_header_validations(self):
+ for tar_format, invalid_header in (
+ ("posix", self.invalid_posix_header),
+ ("gnu", self.invalid_gnu_header),
+ ("v7", self.invalid_v7_header),
+ ):
+ with self.subTest(format=tar_format):
+ self._write_buffer(invalid_header)
+ self._assert_raises_read_error_exception()
+
+ def test_early_stop_at_invalid_offset_header(self):
+ buffer = self.valid_gnu_header + self.invalid_gnu_header + self.valid_gnu_header
+ self._write_buffer(buffer)
+ members = self._get_members()
+ self.assertEqual(len(members), 1)
+ self.assertEqual(members[0].name, "filename")
+ self.assertEqual(members[0].offset, 0)
+
+ def test_ignore_invalid_archive(self):
+ # 3 invalid headers with their respective data
+ buffer = (self.invalid_gnu_header + self.data_block) * 3
+ self._write_buffer(buffer)
+ members = self._get_members(ignore_zeros=True)
+ self.assertEqual(len(members), 0)
+
+ def test_ignore_invalid_offset_headers(self):
+ for first_block, second_block, expected_offset in (
+ (
+ (self.valid_gnu_header),
+ (self.invalid_gnu_header + self.data_block),
+ 0,
+ ),
+ (
+ (self.invalid_gnu_header + self.data_block),
+ (self.valid_gnu_header),
+ 1024,
+ ),
+ ):
+ self._write_buffer(first_block + second_block)
+ members = self._get_members(ignore_zeros=True)
+ self.assertEqual(len(members), 1)
+ self.assertEqual(members[0].name, "filename")
+ self.assertEqual(members[0].offset, expected_offset)
+
+
def setUpModule():
os_helper.unlink(TEMPDIR)
os.makedirs(TEMPDIR)
Index: Python-3.13.5/Misc/NEWS.d/next/Library/2025-07-23-00-35-29.gh-issue-130577.c7EITy.rst
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ Python-3.13.5/Misc/NEWS.d/next/Library/2025-07-23-00-35-29.gh-issue-130577.c7EITy.rst 2025-08-01 22:13:45.525174751 +0200
@@ -0,0 +1,3 @@
+:mod:`tarfile` now validates archives to ensure member offsets are
+non-negative. (Contributed by Alexander Enrique Urieles Nieto in
+:gh:`130577`.)

View File

@@ -0,0 +1,307 @@
From 1f2e4ec73cf7ece0a8c0a7a85cb73ec9ec0ef85a Mon Sep 17 00:00:00 2001
From: Serhiy Storchaka <storchaka@gmail.com>
Date: Tue, 7 Oct 2025 20:15:26 +0300
Subject: [PATCH] [3.13] gh-139700: Check consistency of the zip64 end of
central directory record (GH-139702)
Support records with "zip64 extensible data" if there are no bytes
prepended to the ZIP file.
(cherry picked from commit 162997bb70e067668c039700141770687bc8f267)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
---
Lib/test/test_zipfile/test_core.py | 82 ++++++++++++++++++-
Lib/zipfile/__init__.py | 51 +++++++-----
...-10-07-19-31-34.gh-issue-139700.vNHU1O.rst | 3 +
3 files changed, 113 insertions(+), 23 deletions(-)
create mode 100644 Misc/NEWS.d/next/Security/2025-10-07-19-31-34.gh-issue-139700.vNHU1O.rst
diff --git a/Lib/test/test_zipfile/test_core.py b/Lib/test/test_zipfile/test_core.py
index 41ec6a437ba917..2212d9c91dc899 100644
--- a/Lib/test/test_zipfile/test_core.py
+++ b/Lib/test/test_zipfile/test_core.py
@@ -884,6 +884,8 @@ def make_zip64_file(
self, file_size_64_set=False, file_size_extra=False,
compress_size_64_set=False, compress_size_extra=False,
header_offset_64_set=False, header_offset_extra=False,
+ extensible_data=b'',
+ end_of_central_dir_size=None, offset_to_end_of_central_dir=None,
):
"""Generate bytes sequence for a zip with (incomplete) zip64 data.
@@ -937,6 +939,12 @@ def make_zip64_file(
central_dir_size = struct.pack('<Q', 58 + 8 * len(central_zip64_fields))
offset_to_central_dir = struct.pack('<Q', 50 + 8 * len(local_zip64_fields))
+ if end_of_central_dir_size is None:
+ end_of_central_dir_size = 44 + len(extensible_data)
+ if offset_to_end_of_central_dir is None:
+ offset_to_end_of_central_dir = (108
+ + 8 * len(local_zip64_fields)
+ + 8 * len(central_zip64_fields))
local_extra_length = struct.pack("<H", 4 + 8 * len(local_zip64_fields))
central_extra_length = struct.pack("<H", 4 + 8 * len(central_zip64_fields))
@@ -965,14 +973,17 @@ def make_zip64_file(
+ filename
+ central_extra
# Zip64 end of central directory
- + b"PK\x06\x06,\x00\x00\x00\x00\x00\x00\x00-\x00-"
- + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00"
+ + b"PK\x06\x06"
+ + struct.pack('<Q', end_of_central_dir_size)
+ + b"-\x00-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00"
+ b"\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"
+ central_dir_size
+ offset_to_central_dir
+ + extensible_data
# Zip64 end of central directory locator
- + b"PK\x06\x07\x00\x00\x00\x00l\x00\x00\x00\x00\x00\x00\x00\x01"
- + b"\x00\x00\x00"
+ + b"PK\x06\x07\x00\x00\x00\x00"
+ + struct.pack('<Q', offset_to_end_of_central_dir)
+ + b"\x01\x00\x00\x00"
# end of central directory
+ b"PK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00:\x00\x00\x002\x00"
+ b"\x00\x00\x00\x00"
@@ -1003,6 +1014,7 @@ def test_bad_zip64_extra(self):
with self.assertRaises(zipfile.BadZipFile) as e:
zipfile.ZipFile(io.BytesIO(missing_file_size_extra))
self.assertIn('file size', str(e.exception).lower())
+ self.assertTrue(zipfile.is_zipfile(io.BytesIO(missing_file_size_extra)))
# zip64 file size present, zip64 compress size present, one field in
# extra, expecting two, equals missing compress size.
@@ -1014,6 +1026,7 @@ def test_bad_zip64_extra(self):
with self.assertRaises(zipfile.BadZipFile) as e:
zipfile.ZipFile(io.BytesIO(missing_compress_size_extra))
self.assertIn('compress size', str(e.exception).lower())
+ self.assertTrue(zipfile.is_zipfile(io.BytesIO(missing_compress_size_extra)))
# zip64 compress size present, no fields in extra, expecting one,
# equals missing compress size.
@@ -1023,6 +1036,7 @@ def test_bad_zip64_extra(self):
with self.assertRaises(zipfile.BadZipFile) as e:
zipfile.ZipFile(io.BytesIO(missing_compress_size_extra))
self.assertIn('compress size', str(e.exception).lower())
+ self.assertTrue(zipfile.is_zipfile(io.BytesIO(missing_compress_size_extra)))
# zip64 file size present, zip64 compress size present, zip64 header
# offset present, two fields in extra, expecting three, equals missing
@@ -1037,6 +1051,7 @@ def test_bad_zip64_extra(self):
with self.assertRaises(zipfile.BadZipFile) as e:
zipfile.ZipFile(io.BytesIO(missing_header_offset_extra))
self.assertIn('header offset', str(e.exception).lower())
+ self.assertTrue(zipfile.is_zipfile(io.BytesIO(missing_header_offset_extra)))
# zip64 compress size present, zip64 header offset present, one field
# in extra, expecting two, equals missing header offset
@@ -1049,6 +1064,7 @@ def test_bad_zip64_extra(self):
with self.assertRaises(zipfile.BadZipFile) as e:
zipfile.ZipFile(io.BytesIO(missing_header_offset_extra))
self.assertIn('header offset', str(e.exception).lower())
+ self.assertTrue(zipfile.is_zipfile(io.BytesIO(missing_header_offset_extra)))
# zip64 file size present, zip64 header offset present, one field in
# extra, expecting two, equals missing header offset
@@ -1061,6 +1077,7 @@ def test_bad_zip64_extra(self):
with self.assertRaises(zipfile.BadZipFile) as e:
zipfile.ZipFile(io.BytesIO(missing_header_offset_extra))
self.assertIn('header offset', str(e.exception).lower())
+ self.assertTrue(zipfile.is_zipfile(io.BytesIO(missing_header_offset_extra)))
# zip64 header offset present, no fields in extra, expecting one,
# equals missing header offset
@@ -1072,6 +1089,63 @@ def test_bad_zip64_extra(self):
with self.assertRaises(zipfile.BadZipFile) as e:
zipfile.ZipFile(io.BytesIO(missing_header_offset_extra))
self.assertIn('header offset', str(e.exception).lower())
+ self.assertTrue(zipfile.is_zipfile(io.BytesIO(missing_header_offset_extra)))
+
+ def test_bad_zip64_end_of_central_dir(self):
+ zipdata = self.make_zip64_file(end_of_central_dir_size=0)
+ with self.assertRaisesRegex(zipfile.BadZipFile, 'Corrupt.*record'):
+ zipfile.ZipFile(io.BytesIO(zipdata))
+ self.assertFalse(zipfile.is_zipfile(io.BytesIO(zipdata)))
+
+ zipdata = self.make_zip64_file(end_of_central_dir_size=100)
+ with self.assertRaisesRegex(zipfile.BadZipFile, 'Corrupt.*record'):
+ zipfile.ZipFile(io.BytesIO(zipdata))
+ self.assertFalse(zipfile.is_zipfile(io.BytesIO(zipdata)))
+
+ zipdata = self.make_zip64_file(offset_to_end_of_central_dir=0)
+ with self.assertRaisesRegex(zipfile.BadZipFile, 'Corrupt.*record'):
+ zipfile.ZipFile(io.BytesIO(zipdata))
+ self.assertFalse(zipfile.is_zipfile(io.BytesIO(zipdata)))
+
+ zipdata = self.make_zip64_file(offset_to_end_of_central_dir=1000)
+ with self.assertRaisesRegex(zipfile.BadZipFile, 'Corrupt.*locator'):
+ zipfile.ZipFile(io.BytesIO(zipdata))
+ self.assertFalse(zipfile.is_zipfile(io.BytesIO(zipdata)))
+
+ def test_zip64_end_of_central_dir_record_not_found(self):
+ zipdata = self.make_zip64_file()
+ zipdata = zipdata.replace(b"PK\x06\x06", b'\x00'*4)
+ with self.assertRaisesRegex(zipfile.BadZipFile, 'record not found'):
+ zipfile.ZipFile(io.BytesIO(zipdata))
+ self.assertFalse(zipfile.is_zipfile(io.BytesIO(zipdata)))
+
+ zipdata = self.make_zip64_file(
+ extensible_data=b'\xca\xfe\x04\x00\x00\x00data')
+ zipdata = zipdata.replace(b"PK\x06\x06", b'\x00'*4)
+ with self.assertRaisesRegex(zipfile.BadZipFile, 'record not found'):
+ zipfile.ZipFile(io.BytesIO(zipdata))
+ self.assertFalse(zipfile.is_zipfile(io.BytesIO(zipdata)))
+
+ def test_zip64_extensible_data(self):
+ # These values are what is set in the make_zip64_file method.
+ expected_file_size = 8
+ expected_compress_size = 8
+ expected_header_offset = 0
+ expected_content = b"test1234"
+
+ zipdata = self.make_zip64_file(
+ extensible_data=b'\xca\xfe\x04\x00\x00\x00data')
+ with zipfile.ZipFile(io.BytesIO(zipdata)) as zf:
+ zinfo = zf.infolist()[0]
+ self.assertEqual(zinfo.file_size, expected_file_size)
+ self.assertEqual(zinfo.compress_size, expected_compress_size)
+ self.assertEqual(zinfo.header_offset, expected_header_offset)
+ self.assertEqual(zf.read(zinfo), expected_content)
+ self.assertTrue(zipfile.is_zipfile(io.BytesIO(zipdata)))
+
+ with self.assertRaisesRegex(zipfile.BadZipFile, 'record not found'):
+ zipfile.ZipFile(io.BytesIO(b'prepended' + zipdata))
+ self.assertFalse(zipfile.is_zipfile(io.BytesIO(b'prepended' + zipdata)))
def test_generated_valid_zip64_extra(self):
# These values are what is set in the make_zip64_file method.
diff --git a/Lib/zipfile/__init__.py b/Lib/zipfile/__init__.py
index 05f387a950ba0a..c01f13729e1c99 100644
--- a/Lib/zipfile/__init__.py
+++ b/Lib/zipfile/__init__.py
@@ -245,7 +245,7 @@ def is_zipfile(filename):
else:
with open(filename, "rb") as fp:
result = _check_zipfile(fp)
- except OSError:
+ except (OSError, BadZipFile):
pass
return result
@@ -253,16 +253,15 @@ def _EndRecData64(fpin, offset, endrec):
"""
Read the ZIP64 end-of-archive records and use that to update endrec
"""
- try:
- fpin.seek(offset - sizeEndCentDir64Locator, 2)
- except OSError:
- # If the seek fails, the file is not large enough to contain a ZIP64
+ offset -= sizeEndCentDir64Locator
+ if offset < 0:
+ # The file is not large enough to contain a ZIP64
# end-of-archive record, so just return the end record we were given.
return endrec
-
+ fpin.seek(offset)
data = fpin.read(sizeEndCentDir64Locator)
if len(data) != sizeEndCentDir64Locator:
- return endrec
+ raise OSError("Unknown I/O error")
sig, diskno, reloff, disks = struct.unpack(structEndArchive64Locator, data)
if sig != stringEndArchive64Locator:
return endrec
@@ -270,16 +269,33 @@ def _EndRecData64(fpin, offset, endrec):
if diskno != 0 or disks > 1:
raise BadZipFile("zipfiles that span multiple disks are not supported")
- # Assume no 'zip64 extensible data'
- fpin.seek(offset - sizeEndCentDir64Locator - sizeEndCentDir64, 2)
+ offset -= sizeEndCentDir64
+ if reloff > offset:
+ raise BadZipFile("Corrupt zip64 end of central directory locator")
+ # First, check the assumption that there is no prepended data.
+ fpin.seek(reloff)
+ extrasz = offset - reloff
data = fpin.read(sizeEndCentDir64)
if len(data) != sizeEndCentDir64:
- return endrec
+ raise OSError("Unknown I/O error")
+ if not data.startswith(stringEndArchive64) and reloff != offset:
+ # Since we already have seen the Zip64 EOCD Locator, it's
+ # possible we got here because there is prepended data.
+ # Assume no 'zip64 extensible data'
+ fpin.seek(offset)
+ extrasz = 0
+ data = fpin.read(sizeEndCentDir64)
+ if len(data) != sizeEndCentDir64:
+ raise OSError("Unknown I/O error")
+ if not data.startswith(stringEndArchive64):
+ raise BadZipFile("Zip64 end of central directory record not found")
+
sig, sz, create_version, read_version, disk_num, disk_dir, \
dircount, dircount2, dirsize, diroffset = \
struct.unpack(structEndArchive64, data)
- if sig != stringEndArchive64:
- return endrec
+ if (diroffset + dirsize != reloff or
+ sz + 12 != sizeEndCentDir64 + extrasz):
+ raise BadZipFile("Corrupt zip64 end of central directory record")
# Update the original endrec using data from the ZIP64 record
endrec[_ECD_SIGNATURE] = sig
@@ -289,6 +305,7 @@ def _EndRecData64(fpin, offset, endrec):
endrec[_ECD_ENTRIES_TOTAL] = dircount2
endrec[_ECD_SIZE] = dirsize
endrec[_ECD_OFFSET] = diroffset
+ endrec[_ECD_LOCATION] = offset - extrasz
return endrec
@@ -322,7 +339,7 @@ def _EndRecData(fpin):
endrec.append(filesize - sizeEndCentDir)
# Try to read the "Zip64 end of central directory" structure
- return _EndRecData64(fpin, -sizeEndCentDir, endrec)
+ return _EndRecData64(fpin, filesize - sizeEndCentDir, endrec)
# Either this is not a ZIP file, or it is a ZIP file with an archive
# comment. Search the end of the file for the "end of central directory"
@@ -346,8 +363,7 @@ def _EndRecData(fpin):
endrec.append(maxCommentStart + start)
# Try to read the "Zip64 end of central directory" structure
- return _EndRecData64(fpin, maxCommentStart + start - filesize,
- endrec)
+ return _EndRecData64(fpin, maxCommentStart + start, endrec)
# Unable to find a valid end of central directory structure
return None
@@ -1458,9 +1474,6 @@ def _RealGetContents(self):
# "concat" is zero, unless zip was concatenated to another file
concat = endrec[_ECD_LOCATION] - size_cd - offset_cd
- if endrec[_ECD_SIGNATURE] == stringEndArchive64:
- # If Zip64 extension structures are present, account for them
- concat -= (sizeEndCentDir64 + sizeEndCentDir64Locator)
if self.debug > 2:
inferred = concat + offset_cd
@@ -2082,7 +2095,7 @@ def _write_end_record(self):
" would require ZIP64 extensions")
zip64endrec = struct.pack(
structEndArchive64, stringEndArchive64,
- 44, 45, 45, 0, 0, centDirCount, centDirCount,
+ sizeEndCentDir64 - 12, 45, 45, 0, 0, centDirCount, centDirCount,
centDirSize, centDirOffset)
self.fp.write(zip64endrec)
diff --git a/Misc/NEWS.d/next/Security/2025-10-07-19-31-34.gh-issue-139700.vNHU1O.rst b/Misc/NEWS.d/next/Security/2025-10-07-19-31-34.gh-issue-139700.vNHU1O.rst
new file mode 100644
index 00000000000000..a8e7a1f1878c6b
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2025-10-07-19-31-34.gh-issue-139700.vNHU1O.rst
@@ -0,0 +1,3 @@
+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.

View File

@@ -28,10 +28,10 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
Lib/test/test_sysconfig.py | 17 +++++++++++--
2 files changed, 67 insertions(+), 7 deletions(-)
Index: Python-3.13.3/Lib/sysconfig/__init__.py
Index: Python-3.13.9/Lib/sysconfig/__init__.py
===================================================================
--- Python-3.13.3.orig/Lib/sysconfig/__init__.py 2025-04-08 15:54:08.000000000 +0200
+++ Python-3.13.3/Lib/sysconfig/__init__.py 2025-04-11 21:52:31.769387873 +0200
--- Python-3.13.9.orig/Lib/sysconfig/__init__.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Lib/sysconfig/__init__.py 2025-11-04 17:41:28.521141323 +0100
@@ -106,6 +106,11 @@
else:
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
@@ -128,10 +128,10 @@ Index: Python-3.13.3/Lib/sysconfig/__init__.py
_CONFIG_VARS['py_version'] = _PY_VERSION
_CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT
_CONFIG_VARS['py_version_nodot'] = _PY_VERSION_SHORT_NO_DOT
Index: Python-3.13.3/Lib/test/test_sysconfig.py
Index: Python-3.13.9/Lib/test/test_sysconfig.py
===================================================================
--- Python-3.13.3.orig/Lib/test/test_sysconfig.py 2025-04-08 15:54:08.000000000 +0200
+++ Python-3.13.3/Lib/test/test_sysconfig.py 2025-04-11 21:52:31.769841915 +0200
--- Python-3.13.9.orig/Lib/test/test_sysconfig.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Lib/test/test_sysconfig.py 2025-11-04 17:41:28.521386489 +0100
@@ -130,8 +130,19 @@
for scheme in _INSTALL_SCHEMES:
for name in _INSTALL_SCHEMES[scheme]:
@@ -153,7 +153,7 @@ Index: Python-3.13.3/Lib/test/test_sysconfig.py
os.path.normpath(expected),
)
@@ -386,7 +397,7 @@
@@ -393,7 +404,7 @@
self.assertTrue(os.path.isfile(config_h), config_h)
def test_get_scheme_names(self):
@@ -162,7 +162,7 @@ Index: Python-3.13.3/Lib/test/test_sysconfig.py
if HAS_USER_BASE:
wanted.extend(['nt_user', 'osx_framework_user', 'posix_user'])
self.assertEqual(get_scheme_names(), tuple(sorted(wanted)))
@@ -398,6 +409,8 @@
@@ -405,6 +416,8 @@
cmd = "-c", "import sysconfig; print(sysconfig.get_platform())"
self.assertEqual(py.call_real(*cmd), py.call_link(*cmd))

BIN
Python-3.13.5.tar.xz (Stored with Git LFS)

Binary file not shown.

File diff suppressed because one or more lines are too long

BIN
Python-3.13.9.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@@ -27,10 +27,10 @@
Doc/tools/extensions/pydoc_topics.py | 22 +++++-----
18 files changed, 159 insertions(+), 130 deletions(-)
Index: Python-3.13.5/Doc/Makefile
Index: Python-3.13.9/Doc/Makefile
===================================================================
--- Python-3.13.5.orig/Doc/Makefile 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/Makefile 2025-06-12 21:38:04.908380762 +0200
--- Python-3.13.9.orig/Doc/Makefile 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/Makefile 2025-11-20 01:09:35.814292408 +0100
@@ -14,15 +14,15 @@
SOURCES =
DISTVERSION = $(shell $(PYTHON) tools/extensions/patchlevel.py)
@@ -51,10 +51,10 @@ Index: Python-3.13.5/Doc/Makefile
$(PAPEROPT_$(PAPER)) \
$(SPHINXOPTS) $(SPHINXERRORHANDLING) \
. build/$(BUILDER) $(SOURCES)
Index: Python-3.13.5/Doc/c-api/arg.rst
Index: Python-3.13.9/Doc/c-api/arg.rst
===================================================================
--- Python-3.13.5.orig/Doc/c-api/arg.rst 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/c-api/arg.rst 2025-06-12 21:38:04.908705133 +0200
--- Python-3.13.9.orig/Doc/c-api/arg.rst 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/c-api/arg.rst 2025-11-20 01:07:59.902914275 +0100
@@ -334,7 +334,6 @@
should raise an exception and leave the content of *address* unmodified.
@@ -63,10 +63,10 @@ Index: Python-3.13.5/Doc/c-api/arg.rst
If the *converter* returns :c:macro:`!Py_CLEANUP_SUPPORTED`, it may get called a
second time if the argument parsing eventually fails, giving the converter a
Index: Python-3.13.5/Doc/c-api/typeobj.rst
Index: Python-3.13.9/Doc/c-api/typeobj.rst
===================================================================
--- Python-3.13.5.orig/Doc/c-api/typeobj.rst 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/c-api/typeobj.rst 2025-06-12 21:38:04.908874058 +0200
--- Python-3.13.9.orig/Doc/c-api/typeobj.rst 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/c-api/typeobj.rst 2025-11-20 01:07:59.903382829 +0100
@@ -610,7 +610,7 @@
Functions like :c:func:`PyObject_NewVar` will take the value of N as an
argument, and store in the instance's :c:member:`~PyVarObject.ob_size` field.
@@ -97,10 +97,10 @@ Index: Python-3.13.5/Doc/c-api/typeobj.rst
include :c:type:`PyObject` or :c:type:`PyVarObject` (depending on
whether :c:member:`~PyVarObject.ob_size` should be included). These are
usually defined by the macro :c:macro:`PyObject_HEAD` or
Index: Python-3.13.5/Doc/conf.py
Index: Python-3.13.9/Doc/conf.py
===================================================================
--- Python-3.13.5.orig/Doc/conf.py 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/conf.py 2025-06-12 21:38:04.909609597 +0200
--- Python-3.13.9.orig/Doc/conf.py 2025-11-20 01:07:14.944126757 +0100
+++ Python-3.13.9/Doc/conf.py 2025-11-20 01:07:59.903974303 +0100
@@ -11,6 +11,8 @@
from importlib import import_module
from importlib.util import find_spec
@@ -136,7 +136,7 @@ Index: Python-3.13.5/Doc/conf.py
# Create table of contents entries for domain objects (e.g. functions, classes,
# attributes, etc.). Default is True.
@@ -323,6 +325,9 @@
@@ -257,6 +259,9 @@
# Avoid a warning with Sphinx >= 4.0
root_doc = 'contents'
@@ -146,7 +146,7 @@ Index: Python-3.13.5/Doc/conf.py
# Allow translation of index directives
gettext_additional_targets = [
'index',
@@ -362,7 +367,7 @@
@@ -296,7 +301,7 @@
# (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", "")
@@ -172,22 +172,22 @@ Index: Python-3.13.5/Doc/conf.py
# Options for c_annotations extension
# -----------------------------------
Index: Python-3.13.5/Doc/library/doctest.rst
Index: Python-3.13.9/Doc/library/doctest.rst
===================================================================
--- Python-3.13.5.orig/Doc/library/doctest.rst 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/library/doctest.rst 2025-06-12 21:38:04.909944989 +0200
@@ -308,7 +308,6 @@
searched. Objects imported into the module are not searched.
--- Python-3.13.9.orig/Doc/library/doctest.rst 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/library/doctest.rst 2025-11-20 01:07:59.904511686 +0100
@@ -310,7 +310,6 @@
.. currentmodule:: None
.. attribute:: module.__test__
- :no-typesetting:
In addition, there are cases when you want tests to be part of a module but not part
of the help text, which requires that the tests not be included in the docstring.
Index: Python-3.13.5/Doc/library/email.compat32-message.rst
.. currentmodule:: doctest
Index: Python-3.13.9/Doc/library/email.compat32-message.rst
===================================================================
--- Python-3.13.5.orig/Doc/library/email.compat32-message.rst 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/library/email.compat32-message.rst 2025-06-12 21:38:04.910320877 +0200
--- Python-3.13.9.orig/Doc/library/email.compat32-message.rst 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/library/email.compat32-message.rst 2025-11-20 01:07:59.905009154 +0100
@@ -7,7 +7,6 @@
:synopsis: The base class representing email messages in a fashion
backward compatible with Python 3.2
@@ -196,11 +196,11 @@ Index: Python-3.13.5/Doc/library/email.compat32-message.rst
The :class:`Message` class is very similar to the
Index: Python-3.13.5/Doc/library/xml.etree.elementtree.rst
Index: Python-3.13.9/Doc/library/xml.etree.elementtree.rst
===================================================================
--- Python-3.13.5.orig/Doc/library/xml.etree.elementtree.rst 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/library/xml.etree.elementtree.rst 2025-06-12 21:38:04.910594893 +0200
@@ -874,7 +874,6 @@
--- Python-3.13.9.orig/Doc/library/xml.etree.elementtree.rst 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/library/xml.etree.elementtree.rst 2025-11-20 01:07:59.905273001 +0100
@@ -873,7 +873,6 @@
.. module:: xml.etree.ElementTree
:noindex:
@@ -208,10 +208,10 @@ Index: Python-3.13.5/Doc/library/xml.etree.elementtree.rst
.. class:: Element(tag, attrib={}, **extra)
Index: Python-3.13.5/Doc/tools/check-warnings.py
Index: Python-3.13.9/Doc/tools/check-warnings.py
===================================================================
--- Python-3.13.5.orig/Doc/tools/check-warnings.py 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/tools/check-warnings.py 2025-06-12 21:38:04.910896050 +0200
--- Python-3.13.9.orig/Doc/tools/check-warnings.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/tools/check-warnings.py 2025-11-20 01:07:59.905613002 +0100
@@ -228,7 +228,8 @@
print(filename)
for warning in warnings:
@@ -231,10 +231,10 @@ Index: Python-3.13.5/Doc/tools/check-warnings.py
for warning in warnings
if "Doc/" in warning
}
Index: Python-3.13.5/Doc/tools/extensions/audit_events.py
Index: Python-3.13.9/Doc/tools/extensions/audit_events.py
===================================================================
--- Python-3.13.5.orig/Doc/tools/extensions/audit_events.py 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/tools/extensions/audit_events.py 2025-06-12 21:38:04.911151491 +0200
--- Python-3.13.9.orig/Doc/tools/extensions/audit_events.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/tools/extensions/audit_events.py 2025-11-20 01:08:35.819222654 +0100
@@ -1,9 +1,6 @@
"""Support for documenting audit events."""
@@ -370,10 +370,10 @@ Index: Python-3.13.5/Doc/tools/extensions/audit_events.py
) -> nodes.row:
row = nodes.row()
name_node = nodes.paragraph("", nodes.Text(name))
Index: Python-3.13.5/Doc/tools/extensions/availability.py
Index: Python-3.13.9/Doc/tools/extensions/availability.py
===================================================================
--- Python-3.13.5.orig/Doc/tools/extensions/availability.py 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/tools/extensions/availability.py 2025-06-12 21:38:04.911376735 +0200
--- Python-3.13.9.orig/Doc/tools/extensions/availability.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/tools/extensions/availability.py 2025-11-20 01:07:59.906156697 +0100
@@ -1,8 +1,6 @@
"""Support for documenting platform availability"""
@@ -427,10 +427,10 @@ Index: Python-3.13.5/Doc/tools/extensions/availability.py
app.add_directive("availability", Availability)
return {
Index: Python-3.13.5/Doc/tools/extensions/c_annotations.py
Index: Python-3.13.9/Doc/tools/extensions/c_annotations.py
===================================================================
--- Python-3.13.5.orig/Doc/tools/extensions/c_annotations.py 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/tools/extensions/c_annotations.py 2025-06-12 21:38:04.911575881 +0200
--- Python-3.13.9.orig/Doc/tools/extensions/c_annotations.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/tools/extensions/c_annotations.py 2025-11-20 01:07:59.906354780 +0100
@@ -9,22 +9,26 @@
* Set ``stable_abi_file`` to the path to stable ABI list.
"""
@@ -568,10 +568,10 @@ Index: Python-3.13.5/Doc/tools/extensions/c_annotations.py
return {
"version": "1.0",
"parallel_read_safe": True,
Index: Python-3.13.5/Doc/tools/extensions/changes.py
Index: Python-3.13.9/Doc/tools/extensions/changes.py
===================================================================
--- Python-3.13.5.orig/Doc/tools/extensions/changes.py 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/tools/extensions/changes.py 2025-06-12 21:38:04.911758715 +0200
--- Python-3.13.9.orig/Doc/tools/extensions/changes.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/tools/extensions/changes.py 2025-11-20 01:07:59.906539198 +0100
@@ -1,7 +1,5 @@
"""Support for documenting version of changes, additions, deprecations."""
@@ -607,10 +607,10 @@ Index: Python-3.13.5/Doc/tools/extensions/changes.py
# Override Sphinx's directives with support for 'next'
app.add_directive("versionadded", PyVersionChange, override=True)
app.add_directive("versionchanged", PyVersionChange, override=True)
Index: Python-3.13.5/Doc/tools/extensions/glossary_search.py
Index: Python-3.13.9/Doc/tools/extensions/glossary_search.py
===================================================================
--- Python-3.13.5.orig/Doc/tools/extensions/glossary_search.py 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/tools/extensions/glossary_search.py 2025-06-12 21:38:04.911907976 +0200
--- Python-3.13.9.orig/Doc/tools/extensions/glossary_search.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/tools/extensions/glossary_search.py 2025-11-20 01:07:59.906696224 +0100
@@ -1,21 +1,27 @@
"""Feature search results for glossary items prominently."""
@@ -654,10 +654,10 @@ Index: Python-3.13.5/Doc/tools/extensions/glossary_search.py
app.connect('doctree-resolved', process_glossary_nodes)
app.connect('build-finished', write_glossary_json)
Index: Python-3.13.5/Doc/tools/extensions/implementation_detail.py
Index: Python-3.13.9/Doc/tools/extensions/implementation_detail.py
===================================================================
--- Python-3.13.5.orig/Doc/tools/extensions/implementation_detail.py 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/tools/extensions/implementation_detail.py 2025-06-12 21:38:04.912061736 +0200
--- Python-3.13.9.orig/Doc/tools/extensions/implementation_detail.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/tools/extensions/implementation_detail.py 2025-11-20 01:07:59.906853200 +0100
@@ -1,17 +1,10 @@
"""Support for marking up implementation details."""
@@ -708,10 +708,10 @@ Index: Python-3.13.5/Doc/tools/extensions/implementation_detail.py
app.add_directive("impl-detail", ImplementationDetail)
return {
Index: Python-3.13.5/Doc/tools/extensions/issue_role.py
Index: Python-3.13.9/Doc/tools/extensions/issue_role.py
===================================================================
--- Python-3.13.5.orig/Doc/tools/extensions/issue_role.py 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/tools/extensions/issue_role.py 2025-06-12 21:38:04.912236134 +0200
--- Python-3.13.9.orig/Doc/tools/extensions/issue_role.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/tools/extensions/issue_role.py 2025-11-20 01:07:59.907010386 +0100
@@ -1,22 +1,18 @@
"""Support for referencing issues in the tracker."""
@@ -757,10 +757,10 @@ Index: Python-3.13.5/Doc/tools/extensions/issue_role.py
app.add_role("issue", BPOIssue())
app.add_role("gh", GitHubIssue())
Index: Python-3.13.5/Doc/tools/extensions/misc_news.py
Index: Python-3.13.9/Doc/tools/extensions/misc_news.py
===================================================================
--- Python-3.13.5.orig/Doc/tools/extensions/misc_news.py 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/tools/extensions/misc_news.py 2025-06-12 21:38:04.912390144 +0200
--- Python-3.13.9.orig/Doc/tools/extensions/misc_news.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/tools/extensions/misc_news.py 2025-11-20 01:07:59.907170899 +0100
@@ -1,7 +1,5 @@
"""Support for including Misc/NEWS."""
@@ -813,10 +813,10 @@ Index: Python-3.13.5/Doc/tools/extensions/misc_news.py
app.add_directive("miscnews", MiscNews)
return {
Index: Python-3.13.5/Doc/tools/extensions/patchlevel.py
Index: Python-3.13.9/Doc/tools/extensions/patchlevel.py
===================================================================
--- Python-3.13.5.orig/Doc/tools/extensions/patchlevel.py 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/tools/extensions/patchlevel.py 2025-06-12 21:38:04.912563631 +0200
--- Python-3.13.9.orig/Doc/tools/extensions/patchlevel.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/tools/extensions/patchlevel.py 2025-11-20 01:07:59.907494228 +0100
@@ -3,7 +3,7 @@
import re
import sys
@@ -854,10 +854,10 @@ Index: Python-3.13.5/Doc/tools/extensions/patchlevel.py
version = f"{info.major}.{info.minor}"
release = f"{info.major}.{info.minor}.{info.micro}"
if info.releaselevel != "final":
Index: Python-3.13.5/Doc/tools/extensions/pydoc_topics.py
Index: Python-3.13.9/Doc/tools/extensions/pydoc_topics.py
===================================================================
--- Python-3.13.5.orig/Doc/tools/extensions/pydoc_topics.py 2025-06-12 21:37:37.257659788 +0200
+++ Python-3.13.5/Doc/tools/extensions/pydoc_topics.py 2025-06-12 21:38:04.912726688 +0200
--- Python-3.13.9.orig/Doc/tools/extensions/pydoc_topics.py 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Doc/tools/extensions/pydoc_topics.py 2025-11-20 01:07:59.907684617 +0100
@@ -1,21 +1,23 @@
"""Support for building "topic help" for pydoc."""

View File

@@ -8,10 +8,10 @@ Date: Tue Nov 26 13:46:33 2024 +0000
Lib/test/test_sysconfig.py | 67 ---------------------------------------------
1 file changed, 1 insertion(+), 66 deletions(-)
Index: Python-3.13.5/Lib/test/test_sysconfig.py
Index: Python-3.13.9/Lib/test/test_sysconfig.py
===================================================================
--- Python-3.13.5.orig/Lib/test/test_sysconfig.py 2025-06-12 19:55:42.184491497 +0200
+++ Python-3.13.5/Lib/test/test_sysconfig.py 2025-06-12 19:56:05.737665419 +0200
--- Python-3.13.9.orig/Lib/test/test_sysconfig.py 2025-11-04 17:41:28.521386489 +0100
+++ Python-3.13.9/Lib/test/test_sysconfig.py 2025-11-04 17:42:36.888243505 +0100
@@ -110,6 +110,7 @@
**venv_create_args,
)
@@ -20,7 +20,7 @@ Index: Python-3.13.5/Lib/test/test_sysconfig.py
def test_get_path_names(self):
self.assertEqual(get_path_names(), sysconfig._SCHEME_KEYS)
@@ -604,72 +605,6 @@
@@ -611,72 +612,6 @@
suffix = sysconfig.get_config_var('EXT_SUFFIX')
self.assertTrue(suffix.endswith('-darwin.so'), suffix)

View File

@@ -0,0 +1,30 @@
From 4bb41b28d5bac09bccd636d8c5fefe1a462f63a7 Mon Sep 17 00:00:00 2001
From: Alm <alon.menczer@gmail.com>
Date: Mon, 25 Aug 2025 08:56:38 +0300
Subject: [PATCH 1/4] Exclude .pyc files from the computed digest in the jit
stencils
---
Tools/jit/_targets.py | 3 +++
1 file changed, 3 insertions(+)
Index: Python-3.13.7/Tools/jit/_targets.py
===================================================================
--- Python-3.13.7.orig/Tools/jit/_targets.py
+++ Python-3.13.7/Tools/jit/_targets.py
@@ -53,6 +53,9 @@ class _Target(typing.Generic[_S, _R]):
hasher.update(PYTHON_EXECUTOR_CASES_C_H.read_bytes())
hasher.update((out / "pyconfig.h").read_bytes())
for dirpath, _, filenames in sorted(os.walk(TOOLS_JIT)):
+ # Exclude cache files from digest computation to ensure reproducible builds.
+ if dirpath.endswith("__pycache__"):
+ continue
for filename in filenames:
hasher.update(pathlib.Path(dirpath, filename).read_bytes())
return hasher.hexdigest()
Index: Python-3.13.7/Misc/NEWS.d/next/Build/2025-08-27-09-52-45.gh-issue-138061.fMVS9w.rst
===================================================================
--- /dev/null
+++ Python-3.13.7/Misc/NEWS.d/next/Build/2025-08-27-09-52-45.gh-issue-138061.fMVS9w.rst
@@ -0,0 +1 @@
+Ensure reproducible builds by making JIT stencil header generation deterministic.

View File

@@ -0,0 +1,36 @@
From 19b61747df3d62c822285c488753d6fbdf91e3ac Mon Sep 17 00:00:00 2001
From: Daniel Garcia Moreno <daniel.garcia@suse.com>
Date: Tue, 23 Sep 2025 10:20:16 +0200
Subject: [PATCH 1/2] gh-139257: Support docutils >= 0.22
---
Doc/tools/extensions/pyspecific.py | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
Index: Python-3.13.7/Doc/tools/extensions/pyspecific.py
===================================================================
--- Python-3.13.7.orig/Doc/tools/extensions/pyspecific.py
+++ Python-3.13.7/Doc/tools/extensions/pyspecific.py
@@ -25,11 +25,21 @@ from sphinx.util.docutils import SphinxD
SOURCE_URI = 'https://github.com/python/cpython/tree/3.13/%s'
# monkey-patch reST parser to disable alphabetic and roman enumerated lists
+def _disable_alphabetic_and_roman(text):
+ try:
+ # docutils >= 0.22
+ from docutils.parsers.rst.states import InvalidRomanNumeralError
+ raise InvalidRomanNumeralError(text)
+ except ImportError:
+ # docutils < 0.22
+ return None
+
+
from docutils.parsers.rst.states import Body
Body.enum.converters['loweralpha'] = \
Body.enum.converters['upperalpha'] = \
Body.enum.converters['lowerroman'] = \
- Body.enum.converters['upperroman'] = lambda x: None
+ Body.enum.converters['upperroman'] = _disable_alphabetic_and_roman
class PyAwaitableMixin(object):

View File

@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2017 Zbigniew Jędrzejewski-Szmek -->
<application>
<id type="desktop">idle3.desktop</id>
<component type="desktop-application">
<id>org.python.IDLE3</id>
<launchable type="desktop-id">idle3.desktop</launchable>
<name>IDLE3</name>
<metadata_licence>CC0</metadata_licence>
<project_license>Python-2.0</project_license>
<summary>Python 3 Integrated Development and Learning Environment</summary>
<description>
<p>
IDLE is Pythons Integrated Development and Learning Environment.
The GUI is uniform between Windows, Unix, and Mac OS X.
The GUI is uniform between Windows, Unix, and macOS.
IDLE provides an easy way to start writing, running, and debugging
Python code.
</p>
@@ -19,17 +19,33 @@
It provides:
</p>
<ul>
<li>a Python shell window (interactive interpreter) with colorizing of code input, output, and error messages,</li>
<li>a multi-window text editor with multiple undo, Python colorizing, smart indent, call tips, auto completion, and other features,</li>
<li>search within any window, replace within editor windows, and search through multiple files (grep),</li>
<li>a debugger with persistent breakpoints, stepping, and viewing of global and local namespaces.</li>
<li>a Python shell window (interactive interpreter) with colorizing of code input, output, and error messages,</li>
<li>a multi-window text editor with multiple undo, Python colorizing, smart indent, call tips, auto completion, and other features,</li>
<li>search within any window, replace within editor windows, and search through multiple files (grep),</li>
<li>a debugger with persistent breakpoints, stepping, and viewing of global and local namespaces.</li>
</ul>
</description>
<developer id="org.python">
<name>Python Software Foundation</name>
</developer>
<url type="homepage">https://docs.python.org/3/library/idle.html</url>
<screenshots>
<screenshot type="default">http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-main-window.png</screenshot>
<screenshot>http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-class-browser.png</screenshot>
<screenshot>http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-code-viewer.png</screenshot>
<screenshot type="default">
<image>https://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-main-window.png</image>
</screenshot>
<screenshot>
<image>https://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-class-browser.png</image>
</screenshot>
<screenshot>
<image>https://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-code-viewer.png</image>
</screenshot>
</screenshots>
<project_license>Python-2.0</project_license>
<metadata_license>CC0-1.0</metadata_license>
<update_contact>zbyszek@in.waw.pl</update_contact>
</application>
</component>

View File

@@ -0,0 +1,45 @@
---
Modules/readline.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
Index: Python-3.13.9/Modules/readline.c
===================================================================
--- Python-3.13.9.orig/Modules/readline.c 2025-10-14 15:52:31.000000000 +0200
+++ Python-3.13.9/Modules/readline.c 2025-11-20 00:46:45.594286346 +0100
@@ -175,6 +175,8 @@
return PyUnicode_DecodeLocale(s, "surrogateescape");
}
+static int _py_get_history_length(void);
+static void _py_free_history_entry(HIST_ENTRY *entry);
/*
Explicitly disable bracketed paste in the interactive interpreter, even if it's
@@ -399,6 +401,27 @@
/*[clinic end generated code: output=e161a53e45987dc7 input=b8901bf16488b760]*/
{
_history_length = length;
+
+ if (length < 0) {
+ stifle_history(-1);
+ }
+ else {
+ int current_length = _py_get_history_length();
+ if (length < current_length) {
+#if defined(RL_READLINE_VERSION) && RL_READLINE_VERSION >= 0x0500
+ HISTORY_STATE *state = history_get_history_state();
+ if (state) {
+ int i;
+ for (i = 0; i < current_length - length; i++) {
+ _py_free_history_entry(remove_history(0));
+ }
+ state->length = length;
+ free(state);
+ }
+#endif
+ }
+ stifle_history(length);
+ }
Py_RETURN_NONE;
}

View File

@@ -1,3 +1,487 @@
-------------------------------------------------------------------
Wed Nov 19 19:21:41 UTC 2025 - Matej Cepl <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 17:13:03 UTC 2025 - Matej Cepl <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 4 16:44:05 UTC 2025 - Matej Cepl <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 09:15:38 UTC 2025 - Daniel Garcia <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 didnt 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: dont 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.
Dont fail trying to parse weird paths. Dont 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 callers 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: Dont 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 objects __typing_subst__
returns an object that isnt 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 couldnt be properly suppressed.
Patch by Bénédikt Tran.
-------------------------------------------------------------------
Mon Sep 29 06:52:07 UTC 2025 - Daniel Garcia <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 06:41:53 UTC 2025 - Dominique Leuenberger <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 08:15:31 UTC 2025 - Dominique Leuenberger <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 9 10:11:58 UTC 2025 - Daniel Garcia <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 12:31:08 UTC 2025 - Matej Cepl <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
-------------------------------------------------------------------
Tue Aug 12 09:16:40 UTC 2025 - Matej Cepl <mcepl@cepl.eu>
- Add gh137583-only-lock-SSL-context.patch fixing the
regression in 3.13.6 by breaking non-blocking TLS connections
(gh#python/cpython#137583).
-------------------------------------------------------------------
Thu Aug 7 10:08:11 UTC 2025 - Matej Cepl <mcepl@cepl.eu>
- Update to 3.13.6:
- Security
- gh-135661: Fix parsing start and end tags in
html.parser.HTMLParser according to the HTML5 standard.
- Whitespaces no longer accepted between </ and the tag
name. E.g. </ script> does not end the script section.
- Vertical tabulation (\v) and non-ASCII whitespaces no
longer recognized as whitespaces. The only whitespaces
are \t\n\r\f and space.
- Null character (U+0000) no longer ends the tag name.
- Attributes and slashes after the tag name in end tags
are now ignored, instead of terminating after the first
> in quoted attribute value. E.g. </script/foo=">"/>.
- Multiple slashes and whitespaces between the last
attribute and closing > are now ignored in both start
and end tags. E.g. <a foo=bar/ //>.
- Multiple = between attribute name and value are no
longer collapsed. E.g. <a foo==bar> produces attribute
“foo” with value “=bar”.
- gh-102555: Fix comment parsing in html.parser.HTMLParser
according to the HTML5 standard. --!> now ends the comment.
-- > no longer ends the comment. Support abnormally ended
empty comments <--> and <--->.
- gh-135462: Fix quadratic complexity in processing specially
crafted input in html.parser.HTMLParser. End-of-file errors
are now handled according to the HTML5 specs comments and
declarations are automatically closed, tags are ignored
(CVE-2025-6069, bsc#1244705).
- gh-118350: Fix support of escapable raw text mode (elements
“textarea” and “title”) in html.parser.HTMLParser.
- Core and Builtins
- gh-58124: Fix name of the Python encoding in Unicode errors
of the code page codec: use “cp65000” and “cp65001” instead
of “CP_UTF7” and “CP_UTF8” which are not valid Python code
names. Patch by Victor Stinner.
- gh-137314: Fixed a regression where raw f-strings
incorrectly interpreted escape sequences in format
specifications. Raw f-strings now properly preserve literal
backslashes in format specs, matching the behavior from
Python 3.11. For example, rf"{obj:\xFF}" now correctly
produces '\\xFF' instead of 'ÿ'. Patch by Pablo Galindo.
- gh-136541: Fix some issues with the perf trampolines
on x86-64 and aarch64. The trampolines were not being
generated correctly for some cases, which could lead to
the perf integration not working correctly. Patch by Pablo
Galindo.
- gh-109700: Fix memory error handling in
PyDict_SetDefault().
- gh-78465: Fix error message for cls.__new__(cls, ...) where
cls is not instantiable builtin or extension type (with
tp_new set to NULL).
- gh-135871: Non-blocking mutex lock attempts now return
immediately when the lock is busy instead of briefly
spinning in the free threading build.
- gh-135607: Fix potential weakref races in an objects
destructor on the free threaded build.
- gh-135496: Fix typo in the f-string conversion type error
(“exclamanation” -> “exclamation”).
- gh-130077: Properly raise custom syntax errors when
incorrect syntax containing names that are prefixes of soft
keywords is encountered. Patch by Pablo Galindo.
- gh-135148: Fixed a bug where f-string debug expressions
(using =) would incorrectly strip out parts of strings
containing escaped quotes and # characters. Patch by Pablo
Galindo.
- gh-133136: Limit excess memory usage in the free threading
build when a large dictionary or list is resized and
accessed by multiple threads.
- gh-132617: Fix dict.update() modification check that could
incorrectly raise a “dict mutated during update” error when
a different dictionary was modified that happens to share
the same underlying keys object.
- gh-91153: Fix a crash when a bytearray is concurrently
mutated during item assignment.
- gh-127971: Fix off-by-one read beyond the end of a string
in string search.
- gh-125723: Fix crash with gi_frame.f_locals when generator
frames outlive their generator. Patch by Mikhail Efimov.
- Library
- gh-132710: If possible, ensure that uuid.getnode()
returns the same result even across different processes.
Previously, the result was constant only within the same
process. Patch by Bénédikt Tran.
- gh-137273: Fix debug assertion failure in
locale.setlocale() on Windows.
- gh-137257: Bump the version of pip bundled in ensurepip to
version 25.2
- gh-81325: tarfile.TarFile now accepts a path-like when
working on a tar archive. (Contributed by Alexander Enrique
Urieles Nieto in gh-81325.)
- gh-130522: Fix unraisable TypeError raised during
interpreter shutdown in the threading module.
- gh-130577: tarfile now validates archives to ensure member
offsets are non-negative. (Contributed by Alexander Enrique
Urieles Nieto in gh-130577; CVE-2025-8194, bsc#1247249).
- gh-136549: Fix signature of threading.excepthook().
- gh-136523: Fix wave.Wave_write emitting an unraisable when
open raises.
- gh-52876: Add missing keepends (default True)
parameter to codecs.StreamReaderWriter.readline() and
codecs.StreamReaderWriter.readlines().
- gh-85702: If zoneinfo._common.load_tzdata is given a
package without a resource a zoneinfo.ZoneInfoNotFoundError
is raised rather than a PermissionError. Patch by Victor
Stinner.
- gh-134759: Fix UnboundLocalError in
email.message.Message.get_payload() when the payload to
decode is a bytes object. Patch by Kliment Lamonov.
- gh-136028: Fix parsing month names containing “İ” (U+0130,
LATIN CAPITAL LETTER I WITH DOT ABOVE) in time.strptime().
This affects locales az_AZ, ber_DZ, ber_MA and crh_UA.
- gh-135995: In the palmos encoding, make byte 0x9b decode to
(U+203A - SINGLE RIGHT-POINTING ANGLE QUOTATION MARK).
- gh-53203: Fix time.strptime() for %c and %x formats on
locales byn_ER, wal_ET and lzh_TW, and for %X format on
locales ar_SA, bg_BG and lzh_TW.
- gh-91555: An earlier change, which was introduced in
3.13.4, has been reverted. It disabled logging for a logger
during handling of log messages for that logger. Since the
reversion, the behaviour should be as it was before 3.13.4.
- gh-135878: Fixes a crash of types.SimpleNamespace on free
threading builds, when several threads were calling its
__repr__() method at the same time.
- gh-135836: Fix IndexError in
asyncio.loop.create_connection() that could occur when
non-OSError exception is raised during connection and
sockets close() raises OSError.
- gh-135836: Fix IndexError in
asyncio.loop.create_connection() that could occur when the
Happy Eyeballs algorithm resulted in an empty exceptions
list during connection attempts.
- gh-135855: Raise TypeError instead of SystemError when
_interpreters.set___main___attrs() is passed a non-dict
object. Patch by Brian Schubert.
- gh-135815: netrc: skip security checks if os.getuid() is
missing. Patch by Bénédikt Tran.
- gh-135640: Address bug where it was possible to call
xml.etree.ElementTree.ElementTree.write() on an ElementTree
object with an invalid root element. This behavior blanked
the file passed to write if it already existed.
- gh-135444: Fix asyncio.DatagramTransport.sendto() to
account for datagram header size when data cannot be sent.
- gh-135497: Fix os.getlogin() failing for longer usernames
on BSD-based platforms.
- gh-135487: Fix reprlib.Repr.repr_int() when given integers
with more than sys.get_int_max_str_digits() digits. Patch
by Bénédikt Tran.
- gh-135335: multiprocessing: Flush stdout and stderr after
preloading modules in the forkserver.
- gh-135244: uuid: when the MAC address cannot be
determined, the 48-bit node ID is now generated with a
cryptographically-secure pseudo-random number generator
(CSPRNG) as per RFC 9562, §6.10.3. This affects uuid1().
- gh-135069: Fix the “Invalid error handling” exception in
encodings.idna.IncrementalDecoder to correctly replace the
errors parameter.
- gh-134698: Fix a crash when calling methods of
ssl.SSLContext or ssl.SSLSocket across multiple threads.
- gh-132124: On POSIX-compliant systems,
multiprocessing.util.get_temp_dir() now ignores TMPDIR
(and similar environment variables) if the path length of
AF_UNIX socket files exceeds the platform-specific maximum
length when using the forkserver start method. Patch by
Bénédikt Tran.
- gh-133439: Fix dot commands with trailing spaces are
mistaken for multi-line SQL statements in the sqlite3
command-line interface.
- gh-132969: Prevent the ProcessPoolExecutor executor thread,
which remains running when shutdown(wait=False), from
attempting to adjust the pools worker processes after
the object state has already been reset during shutdown.
A combination of conditions, including a worker process
having terminated abormally, resulted in an exception and
a potential hang when the still-running executor thread
attempted to replace dead workers within the pool.
- gh-130664: Support the '_' digit separator in formatting
of the integral part of Decimals. Patch by Sergey B
Kirpichev.
- gh-85702: If zoneinfo._common.load_tzdata is given a
package without a resource a ZoneInfoNotFoundError is
raised rather than a IsADirectoryError.
- gh-130664: Handle corner-case for Fractions formatting:
treat zero-padding (preceding the width field by a zero
('0') character) as an equivalent to a fill character of
'0' with an alignment type of '=', just as in case of
floats.
- Tools/Demos
- gh-135968: Stubs for strip are now provided as part of an
iOS install.
- Tests
- gh-135966: The iOS testbed now handles the app_packages
folder as a site directory.
- gh-135494: Fix regrtest to support excluding tests from
--pgo tests. Patch by Victor Stinner.
- gh-135489: Show verbose output for failing tests during PGO
profiling step with enable-optimizations.
- Documentation
- gh-135171: Document that the iterator for the leftmost for
clause in the generator expression is created immediately.
- Build
- gh-135497: Fix the detection of MAXLOGNAME in the
configure.ac script.
- Remove upstreamed patches:
- CVE-2025-8194-tarfile-no-neg-offsets.patch
- CVE-2025-6069-quad-complex-HTMLParser.patch
-------------------------------------------------------------------
Fri Aug 1 20:09:24 UTC 2025 - Matej Cepl <mcepl@cepl.eu>

View File

@@ -1,7 +1,7 @@
#
# spec file for package python313
#
# Copyright (c) 2025 SUSE LLC
# Copyright (c) 2025 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -167,7 +167,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.13.5
Version: 3.13.9
%define tarversion %{version}
%define tarname Python-%{tarversion}
Release: 0
@@ -231,12 +231,19 @@ Patch42: gh126985-mv-pyvenv.cfg2getpath.patch
# PATCH-FIX-UPSTREAM bsc1243155-sphinx-non-determinism.patch bsc#1243155 mcepl@suse.com
# Doc: Generate ids for audit_events using docname
Patch43: bsc1243155-sphinx-non-determinism.patch
# PATCH-FIX-UPSTREAM CVE-2025-6069-quad-complex-HTMLParser.patch bsc#1244705 mcepl@suse.com
# avoid quadratic complexity when processing malformed inputs with HTMLParser
Patch44: CVE-2025-6069-quad-complex-HTMLParser.patch
# PATCH-FIX-UPSTREAM CVE-2025-8194-tarfile-no-neg-offsets.patch bsc#1247249 mcepl@suse.com
# tarfile now validates archives to ensure member offsets are non-negative
Patch45: CVE-2025-8194-tarfile-no-neg-offsets.patch
# PATCH-FIX-UPSTREAM gh138131-exclude-pycache-from-digest.patch bsc#1244680 daniel.garcia@suse.com
Patch44: gh138131-exclude-pycache-from-digest.patch
# PATCH-FIX-OPENSUSE gh139257-Support-docutils-0.22.patch gh#python/cpython#139257 daniel.garcia@suse.com
Patch45: gh139257-Support-docutils-0.22.patch
# PATCH-FIX-UPSTREAM CVE-2025-8291-consistency-zip64.patch bsc#1251305 mcepl@suse.com
# Check consistency of the zip64 end of central directory record
Patch46: CVE-2025-8291-consistency-zip64.patch
# PATCH-FIX-UPSTREAM CVE-2025-6075-expandvars-perf-degrad.patch bsc#1252974 mcepl@suse.com
# Avoid potential quadratic complexity vulnerabilities in path modules
Patch47: CVE-2025-6075-expandvars-perf-degrad.patch
# PATCH-FIX-UPSTREAM pass-test_write_read_limited_history.patch bsc#[0-9]+ mcepl@suse.com
# Fix readline history truncation when length is reduced
Patch48: pass-test_write_read_limited_history.patch
BuildRequires: autoconf-archive
BuildRequires: automake
BuildRequires: fdupes
@@ -291,8 +298,6 @@ ExcludeArch: aarch64
%endif
%if %{with general}
# required for idle3 (.desktop and .appdata.xml files)
BuildRequires: appstream-glib
BuildRequires: gcc-c++
BuildRequires: gdbm-devel
BuildRequires: gettext
@@ -558,9 +563,6 @@ rm Lib/site-packages/README.txt
# Add vendored bluez-devel files
tar xvf %{SOURCE21}
# Don't fail on warnings when building documentation
# sed -i -e '/^SPHINXERRORHANDLING/s/-W//' Doc/Makefile
%build
export SUSE_VERSION="0%{?suse_version}"
export SLE_VERSION="0%{?sle_version}"
@@ -784,7 +786,6 @@ install -m 644 -D -t %{buildroot}%{_datadir}/applications idle%{python_abi}.desk
cp %{SOURCE20} idle%{python_abi}.appdata.xml
sed -i -e 's:idle3.desktop:idle%{python_abi}.desktop:g' idle%{python_abi}.appdata.xml
install -m 644 -D -t %{buildroot}%{_datadir}/metainfo idle%{python_abi}.appdata.xml
appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/idle%{python_abi}.appdata.xml
%fdupes %{buildroot}/%{_libdir}/python%{python_abi}
%endif