Compare commits

...
Sign in to create a new pull request.

94 commits

Author SHA1 Message Date
Miro Hrončok
0ca3f59c07 On EL 9, also supports reparse deferral in expat
This replaces one downstream-only patch with another.
Yet arguably, this is the safer thing to do.

Read the patch description for details; won't copy paste them here.

Also, require expat >= version-release when expat < 2.7.4.

Assisted-By: Claude Opus 4.6
2026-08-13 12:47:37 +02:00
Karolina Surma
b93f3ee7d7 Update to Python 3.13.15 2026-08-11 10:32:30 +02:00
Fedora Release Engineering
8cc71e2467 Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild 2026-07-16 22:48:21 +00:00
Lumir Balhar
ae2158c990 Run a new test to monitor changes in required symbols 2026-07-01 12:34:13 +02:00
Karolina Surma
a5e28d44e7 Update to Python 3.13.14 2026-06-11 16:12:16 +02:00
Miro Hrončok
58718512ed Explicitly build with OpenSSL 3 for now
https://fedoraproject.org/wiki/Changes/OpenSSL40
2026-04-09 13:26:27 +02:00
Tomáš Hrnčiar
c731000e1e Update to 3.13.13 2026-04-08 15:53:50 +02:00
Miro Hrončok
c444274dd9 Only explicitly require expat >= installed version when expat < 2.7.4
See https://src.fedoraproject.org/rpms/expat/c/4da0543472

(cherry picked from python3.15 commit ce1bde3e67443b7cf5df33bf58cb2ec75cc2c8e2)
2026-03-31 15:45:13 +02:00
Lumir Balhar
007c7d59dd Security fix for CVE-2026-4519 (rhbz#2449729) 2026-03-26 09:25:11 +01:00
Tomáš Hrnčiar
b909398e15 Backport patches to fix CVEs CVE-2025-15366, CVE-2025-15367 2026-02-10 09:54:41 +01:00
Tomáš Hrnčiar
ad7f5eb689 Update to 3.13.12 2026-02-09 17:21:36 +01:00
Fedora Release Engineering
1045416eac Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild 2026-01-17 10:40:12 +00:00
Karolina Surma
faeed1b6c7 Extend the expat requirement to differentiate between 32 and 64 arches
(cherry picked from python3.15 commit a5ca170d3f1e6e19f5df66f21482c2b10593af42)
2026-01-13 16:28:34 +01:00
Karolina Surma
1b3b52c264 Require at least the same expat version as used during the build
In the past we have had a versioned requirement on expat, e.g.:
https://src.fedoraproject.org/rpms/python3.13/c/c686992b6c25a39d0e4117053ddb669fd5998723
The explanation is still valid: if Python is built with an expat version
with new symbols, and used with an installed older expat, it won't work,
preventing crating new venvs, and many more.
This has happened again now with expat 2.7.2 introducing new symbols.

Reintroduce the versioned requirement and make it future-proof - the
generated version will always match at least the one present in the buildroot
during the Python build.
2026-01-07 12:27:50 +01:00
Miro Hrončok
98ab1346cf Update to 3.13.11 2025-12-05 22:38:46 +01:00
Tomáš Hrnčiar
efb1f534c5 Update to 3.13.10 2025-12-03 10:30:59 +01:00
Miro Hrončok
f17c52832b Inject SBOM into the installed wheels (when using the bundled ones) 2025-10-15 11:58:34 +00:00
Karolina Surma
1f3785e703 trace is officially licensed as HPND-SMC
https://gitlab.com/fedora/legal/fedora-license-data/-/issues/657#note_2815942473
2025-10-15 11:53:43 +00:00
Miro Hrončok
edb5d53104 Update to Python 3.13.9 2025-10-14 23:40:57 +02:00
Karolina Surma
a362f2a9e1 Update to Python 3.13.8 2025-10-07 19:33:22 +02:00
Karolina Surma
3643baab9a Include licenses of incorporated software (rhbz#2133426)
Python includes a lot of differently licensed functions and  modules.
We gather the list from https://docs.python.org/3.13/license.html.

Detect changes to Doc/license.rst with file hash automatically in %prep.
2025-09-26 12:54:13 +02:00
Lumir Balhar
66c0a64ef8 rpminspect: Wrap strings with globs with single quotes
It seems to be required since rpminspect 2.0:
1593c38ce4
2025-08-26 13:24:41 +02:00
Miro Hrončok
666e5f924e Update to 3.13.7 2025-08-14 23:01:00 +02:00
Tomáš Hrnčiar
0f632505c6 Update to 3.13.6 2025-08-07 10:01:11 +02:00
Lukáš Zachar
2c3a2e93e2 Drop STI and use tmt instead
Resolves: rhbz#2383059
2025-08-04 17:50:06 +02:00
Miro Hrončok
7042c32c98 Fix CVE-2025-8194: Tarfile infinite loop during parsing with negative member offset 2025-07-28 22:30:40 +02:00
Fedora Release Engineering
fc659cc8a2 Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-25 11:19:24 +00:00
Miro Hrončok
aef12e770a Disable JIT on RHEL
For now on, until we figure out a way of building the JIT with pre-built stencils,
we disable the JIT on RHEL to avoid a dependency on a specific LLVM+clang version.

https://discuss.python.org/t/building-the-jit-with-pre-built-stencils/91838
https://src.fedoraproject.org/rpms/python3.14/pull-request/40
https://github.com/fedora-eln/eln/issues/207

----------

This was cherry-picked from https://src.fedoraproject.org/rpms/python3.14/c/ef2d703504cf0039fe5dc82e21e20053cc827c10
for https://github.com/fedora-eln/eln/issues/258#issuecomment-3085727051

With one difference: We build this package on EPEL and we have clang18 there.
2025-07-20 23:38:48 +02:00
Karolina Surma
1331394c24 Lower the minimal required autoconf version for EPEL 9 build 2025-06-25 16:33:29 +02:00
Karolina Surma
f31a75016f Switch the basic conditionals based on the bootstrap's value
We always switch rpmswheels, optimizations and tests when bootstrapping
new Python version, so they can be tied to the bootstrap conditional.
With that, switching the bootstrap in Koji side tag will be possible,
letting us to avoid separate "bootstrap" and "rebuild" commits.
2025-06-25 16:33:29 +02:00
Karolina Surma
1a07ebce6b Move the bootstrapping conditionals above the global metadata
We need to have it above the Release field, in order for the build NVR
to contain the ~bootstrap suffix and sort correctly (lower than the main
build).

This enables bootstrapping the package directly in Koji side tag.
2025-06-25 11:53:04 +02:00
Karolina Surma
a7e6af421e Downstream patch: Skip tests not working with older expat version
This will ensure the tests run in Fedoras and EPEL 10, but are skipped
for EPEL 9.
2025-06-25 09:46:57 +02:00
Karolina Surma
c6f6c7c522 Define %python3_pkgversion based on the Python's status
Main Python should retain the value '3', non-main the major-minor one.
We need that to request the correctly versioned wheels for EPEL builds.
2025-06-24 12:58:07 +02:00
Karolina Surma
8df7c5a736 Remove the upper version bound from expat library
It's already greater than 2.6 in all Fedoras.
2025-06-24 11:22:52 +02:00
Miro Hrončok
17339454ef Verify bundled() provides for setuptools.whl 2025-05-13 17:29:44 +00:00
Miro Hrončok
ae868353c3 Update to 3.13.5 2025-06-12 12:10:14 +02:00
Charalampos Stratakis
2eee834815 Enable PAC and BTI hardware protections for aarch64 2025-06-12 02:49:36 +02:00
Miro Hrončok
d1bf28e630 Revert "Add perf to the testing BuildRequires"
This reverts commit 2198fa7927.

The test fails for 3.13.4.
2025-06-05 11:40:47 +02:00
Tomáš Hrnčiar
b13a982a62 Update to 3.13.4 2025-06-04 13:42:18 +02:00
Python Maint
093e433f0c Rebuilt as non-main Python on Fedora 43 2025-06-02 14:02:26 +02:00
Charalampos Stratakis
2198fa7927 Add perf to the testing BuildRequires
Perf profiling showing the Python functions is only
supported on x86_64 and aarch64 at the moment.

Adding perf as a BuildRequires allows tests that utilize the
perf binary to run.
2025-05-12 18:41:11 +02:00
Miro Hrončok
5336a4f623 Drop requirement on python-wheel-wheel with setuptools >= 71 2025-05-06 19:12:54 +02:00
Charalampos Stratakis
d3f76dd9d5 Apply Intel's CET for mitigation against control-flow hijacking attacks 2025-04-23 16:16:36 +02:00
Tomáš Hrnčiar
8dd054a595 Regenerate patches with updated importpatches script 2025-04-17 12:17:38 +02:00
Tomáš Hrnčiar
ee3b609ce7 Update to 3.13.3 2025-04-10 15:17:59 +02:00
Miro Hrončok
94a1f56279 Rebuilt with mpdecimal 4.0.0 2025-02-06 12:04:28 +01:00
Charalampos Stratakis
4f7875132e Update to 3.13.2
Security fix for CVE-2025-0938

Fixes: rhbz#2343274
2025-02-04 22:44:24 +01:00
Miro Hrončok
fd1e3b0098 Changelog typo 2025-02-03 18:30:24 +01:00
Miro Hrončok
ef73f1e89c On Fedora 41 or older, statically build the _datetime module into libpython
- This fixes a segfault when importng it from Python 3.13.0 updated to 3.13.1+ while running
- Fixes: rhbz#2333852
2025-01-29 21:31:44 +01:00
Miro Hrončok
63816a4d7a Ensure this package is built with Tk 8
- Fixes: rhbz#2337760
2025-01-29 21:29:07 +01:00
Charalampos Stratakis
d6e1ac20e8 Remove redundant --with-system-ffi configure option
The option has been removed since Python 3.12

See: 25590eb5de
2025-01-23 02:04:14 +01:00
Fedora Release Engineering
027f189877 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-18 21:09:02 +00:00
Miro Hrončok
00aa424d30 Security fix for CVE-2024-12254
- Fixes: rhbz#2330927
2024-12-09 14:59:04 +01:00
Miro Hrončok
f84c0fe12f Optimize patch 251 a tiny bit
Before:

    $ python3.14 -m timeit -s 'import sysconfig' 'sysconfig.get_paths()'
    2000 loops, best of 5: 157 usec per loop

    $ python3.14 -m timeit -s 'import sysconfig' 'sysconfig.get_paths()'
    2000 loops, best of 5: 162 usec per loop

    $ python3.14 -m timeit -s 'import sysconfig' 'sysconfig.get_paths()'
    1000 loops, best of 5: 146 usec per loop

After:

    $ python3.14 -m timeit -s 'import sysconfig' 'sysconfig.get_paths()'
    5000 loops, best of 5: 75.9 usec per loop

    $ python3.14 -m timeit -s 'import sysconfig' 'sysconfig.get_paths()'
    5000 loops, best of 5: 77.1 usec per loop

    $ python3.14 -m timeit -s 'import sysconfig' 'sysconfig.get_paths()'
    5000 loops, best of 5: 76.2 usec per loop

The results are inconclusive on 3.13,
but we want the patch to be identical (if possible).

This can be shipped with the next update.
2024-12-05 11:57:53 +01:00
Charalampos Stratakis
ae3b33f266 Update to 3.13.1
Security fix for CVE-2024-9287

Fixes: rhbz#2321657
2024-12-04 14:31:57 +01:00
U2FsdGVkX1
a5d0a1835e Increase the timeout for riscv64 because the current RISC-V CPU has slower performance. 2024-11-13 20:17:42 +08:00
Miro Hrončok
461d9adf9e Turn valgrind bcond into in-place %ifarch
There's no way to turn this bcond off on arches where it is not supported.
There's no need to turn this bcond on on arches where it is supported.
2024-10-15 18:19:14 +02:00
Miro Hrončok
90ea69d66a Remove rarely used bconds
I have not used those in ~12 years.
2024-10-15 18:18:17 +02:00
Miro Hrončok
7fc2da03e5 Use new-style RPM bconds 2024-10-15 18:16:31 +02:00
Miro Hrončok
a8ce422a93 CI: Explicitly lists flags to be checked for -O3/-O0
Not listing the flags skips the ones without -O.
This way, we no longer assert -O3/-O2 is the only -O flag,
but we also assert it is actually set.
2024-10-14 12:00:50 +02:00
Karolina Surma
f443f05bcf Skip test_signal and test_deadlock on ppc64le 2024-10-08 12:11:07 +02:00
Karolina Surma
1299ef8725 Update to Python 3.13.0 2024-10-08 09:39:13 +02:00
Miro Hrončok
7aec56a73f Update to Python 3.13.0rc3 2024-10-01 17:36:42 +02:00
Miro Hrončok
d3b035438f Fix segfault when trying to use PyRun_SimpleString() with some imports 2024-09-19 18:48:13 +02:00
Miro Hrončok
9de4655645 Handle an empty AST body when reporting tracebacks
- Fixes: rhbz#2311907
2024-09-19 00:08:35 +02:00
Miro Hrončok
3758838aa7 Revert "Skip test_abort_clients"
This was fixed upstream in https://github.com/python/cpython/pull/123443

This reverts commit 75fa60d507.
This reverts commit f01f38eff5.
2024-09-09 15:29:28 +02:00
Miro Hrončok
75f739f5a9 Revert "Skip test_sendfile_close_peer_in_the_middle_of_receiving on ppc64le"
This was fixed upstream in https://github.com/python/cpython/pull/123421

This reverts commit 222d4d99b9.
2024-09-09 15:25:51 +02:00
Karolina Surma
19f429832d Update to Python 3.13.0rc2 2024-09-07 10:03:09 +02:00
Miro Hrončok
222d4d99b9 Skip test_sendfile_close_peer_in_the_middle_of_receiving on ppc64le
Reported upstream https://github.com/python/cpython/issues/123384
Which was a duplicate of https://github.com/python/cpython/issues/120226

The test is fixed on the main branch, but skipping is easier than backporting.

The failure occurs with Kernel 6.10.x even when Python is built with an older Kernel.
By skipping the tests, we can ship a CVE fix.
2024-08-27 15:28:39 +02:00
Miro Hrončok
75fa60d507 Also skip test_abort_clients when building the package
This is a fixup for f01f38eff5

Previously, the test only failed on CI; now it also fails in %check.
2024-08-26 11:23:49 +02:00
Charalampos Stratakis
b53472088c Security fix for CVE-2024-8088
Fixes: rhbz#2307462
2024-08-23 15:32:50 +02:00
Miro Hrončok
66bf96f29a Security fix for CVE-2024-6923
- Fixes: rhbz#2303160
2024-08-06 23:23:11 +02:00
Miro Hrončok
396df33f84 Fix SystemError in PyEval_GetLocals()
- Fixes: rhbz#2303107
2024-08-06 23:21:44 +02:00
Karolina Surma
5ff1fff3e0 Update to Python 3.13.0rc1 2024-08-01 13:10:59 +02:00
Miro Hrončok
b25f06562b Preserve AST nodes for f-string with single-element format specifiers
- Fixes https://github.com/python/cpython/issues/122300
2024-07-30 12:19:31 +02:00
Miro Hrončok
f01f38eff5 CI: Skip test_abort_clients, failure reported upstream
https://github.com/python/cpython/issues/122136
2024-07-24 00:08:05 +02:00
Miro Hrončok
90526d6169 rpmlint: Exclude unittest and gil from spelling-error
python3-test.x86_64: E: spelling-error ('unittest', '%description -l en_US unittest -> unit test, unit-test, unities')
    python3.13-freethreading.x86_64: E: spelling-error ('gil', '%description -l en_US gil -> Gil, girl, gilt')
    python3.13-freethreading-debug.x86_64: E: spelling-error ('gil', '%description -l en_US gil -> Gil, girl, gilt')
2024-07-23 22:07:22 +00:00
Miro Hrončok
c27761fdda Revert "Skip test_gdb for now"
This reverts commit db3aa2889c.

gdb was fixed in gdb-14.2-13.fc41
2024-07-23 15:24:37 +00:00
Miro Hrončok
7ed344344c Explicitly BuildRequire systemtap-sdt-devel
This is for https://fedoraproject.org/wiki/Changes/Separate_dtrace_package

This already BuildRequired /usr/bin/dtrace, but it also needs the headers:

    In file included from /builddir/build/BUILD/python3.13-3.13.0_b4-build/Python-3.13.0b4/Include/pydtrace.h:11,
                     from /builddir/build/BUILD/python3.13-3.13.0_b4-build/Python-3.13.0b4/Python/ceval.c:40:
    Include/pydtrace_probes.h:10:10: fatal error: sys/sdt.h: No such file or directory
       10 | #include <sys/sdt.h>
          |          ^~~~~~~~~~~
    compilation terminated.
2024-07-23 13:16:37 +02:00
Miro Hrončok
d1242289d7 Group BuildRequires based in %ifs, sort within 2024-07-22 12:01:42 +00:00
Miro Hrončok
745ccf0261 Reduce and conditionalize BuildRequires
- bzip2 is not used directly, only via bzip2-devel
- tar is not used directly either, %autosetup uses rpmuncompress
- desktop-file-utils is only used to install idle desktop file with main_python
- libappstream-glib is only used to validate idle appdata file with main_python
- /usr/sbin/ifconfig is no longer needed for test_uuid
- gcc-c++, glibc-all-langpacks, tzdata are only used in tests
  (although something pulls in tzdata even with bootstrap without tests, so this one is hard to verify)
- gmp-devel in not needed since Python 2.4 (mpz module was removed)
- libGL-devel appears unused (and hard to find why it ever was needed)

Courtesy of https://github.com/mkoncek/unbreq
2024-07-22 12:01:42 +00:00
Miro Hrončok
6740145ba8 Update to Python 3.13.0b4
The freethreading packages are now located in /usr/lib64/python3.13t
See https://github.com/python/cpython/issues/121103

Co-Authored-By: Karolina Surma <ksurma@redhat.com>
2024-07-22 12:53:50 +02:00
Fedora Release Engineering
4463b58c2f Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-19 17:26:54 +00:00
Miro Hrončok
1fc17cc898 Fix a bug that emptied the command history of the Python REPL (~/.python_history) 2024-07-02 11:41:59 +02:00
Karolina Surma
917cccffae Update to Python 3.13.0b3 2024-06-28 10:38:31 +02:00
Miro Hrončok
f1315eaf0b On Fedora 40+ x86_64 and aarch64, build Python with the experimental JIT compiler 2024-06-19 11:58:27 +02:00
Karolina Surma
29ab7b7006 Skip test_deadlock on s390x 2024-06-18 13:00:35 +02:00
Python Maint
5cf9f2e9e5 Rebuilt for Python 3.13 2024-06-06 18:27:18 +02:00
Python Maint
a843455610 Bootstrap for Python 3.13 2024-06-06 16:08:25 +02:00
Karolina Surma
3aedd5cc92 Fedora 38 is EOL, always build with rpmwheels 2024-06-06 11:54:58 +02:00
Karolina Surma
e2f294c9e2 Keep SOURCE_DATE_EPOCH set 2024-06-06 11:54:58 +02:00
Karolina Surma
fe95321993 Skip test_signal for now 2024-06-06 11:54:58 +02:00
Miro Hrončok
db3aa2889c Skip test_gdb for now 2024-06-06 08:51:00 +02:00
Miro Hrončok
7b82077f49 Update to Python 3.13.0b2 2024-06-06 01:32:42 +02:00
13 changed files with 1108 additions and 509 deletions

View file

@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
Date: Mon, 15 Feb 2021 12:19:27 +0100
Subject: [PATCH] 00251: Change user install location
Subject: 00251: Change user install location
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@ -30,10 +30,10 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
3 files changed, 72 insertions(+), 4 deletions(-)
diff --git a/Lib/site.py b/Lib/site.py
index b63447d667..2476b1a484 100644
index 041dca113a..ca6320df2f 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -404,8 +404,15 @@ def getsitepackages(prefixes=None):
@@ -415,8 +415,15 @@ def getsitepackages(prefixes=None):
return sitepackages
def addsitepackages(known_paths, prefixes=None):
@ -51,7 +51,7 @@ index b63447d667..2476b1a484 100644
if os.path.isdir(sitedir):
addsitedir(sitedir, known_paths)
diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py
index 98a14e5d3a..8369073fee 100644
index 43edebce34..40e85568ea 100644
--- a/Lib/sysconfig/__init__.py
+++ b/Lib/sysconfig/__init__.py
@@ -106,6 +106,12 @@
@ -87,7 +87,7 @@ index 98a14e5d3a..8369073fee 100644
_SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include',
'scripts', 'data')
@@ -261,11 +280,40 @@ def _extend_dict(target_dict, other_dict):
@@ -266,11 +285,40 @@ def _extend_dict(target_dict, other_dict):
target_dict[key] = value
@ -120,7 +120,7 @@ index 98a14e5d3a..8369073fee 100644
+ # we only change the defaults here, so explicit --prefix will take precedence
+ # https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe
+ if (scheme == 'posix_prefix' and
+ _PREFIX == '/usr' and
+ sys.prefix == '/usr' and
+ 'RPM_BUILD_ROOT' not in os.environ):
+ _extend_dict(vars, _config_vars_local())
+ else:
@ -130,10 +130,10 @@ index 98a14e5d3a..8369073fee 100644
# On Windows we want to substitute 'lib' for schemes rather
# than the native value (without modifying vars, in case it
diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py
index 9233304c6a..4acaad5ed6 100644
index ce17206a3c..fd95071099 100644
--- a/Lib/test/test_sysconfig.py
+++ b/Lib/test/test_sysconfig.py
@@ -121,8 +121,19 @@ def test_get_path(self):
@@ -130,8 +130,19 @@ def test_get_path(self):
for scheme in _INSTALL_SCHEMES:
for name in _INSTALL_SCHEMES[scheme]:
expected = _INSTALL_SCHEMES[scheme][name].format(**config_vars)
@ -154,7 +154,7 @@ index 9233304c6a..4acaad5ed6 100644
os.path.normpath(expected),
)
@@ -377,7 +388,7 @@ def test_get_config_h_filename(self):
@@ -395,7 +406,7 @@ def test_get_config_h_filename(self):
self.assertTrue(os.path.isfile(config_h), config_h)
def test_get_scheme_names(self):
@ -163,7 +163,7 @@ index 9233304c6a..4acaad5ed6 100644
if HAS_USER_BASE:
wanted.extend(['nt_user', 'osx_framework_user', 'posix_user'])
self.assertEqual(get_scheme_names(), tuple(sorted(wanted)))
@@ -389,6 +400,8 @@ def test_symlink(self): # Issue 7880
@@ -407,6 +418,8 @@ def test_symlink(self): # Issue 7880
cmd = "-c", "import sysconfig; print(sysconfig.get_platform())"
self.assertEqual(py.call_real(*cmd), py.call_link(*cmd))

View file

@ -1,58 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Sam Gross <colesbury@gmail.com>
Date: Thu, 9 May 2024 16:06:20 -0400
Subject: [PATCH] 00428: gh-118846: Fix PGO tests in free-threaded build
Avoid immortalizing objects in tests that verify garbage collection of
classes or modules.
This fixes test_ordered_dict and test_struct.
(cherry picked from commit 1b1db2fd9a531e26b79b34667bccfb938c4d184d)
---
Lib/test/test_ordered_dict.py | 3 ++-
Lib/test/test_struct.py | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/Lib/test/test_ordered_dict.py b/Lib/test/test_ordered_dict.py
index 4571b23dfe..06a0e81227 100644
--- a/Lib/test/test_ordered_dict.py
+++ b/Lib/test/test_ordered_dict.py
@@ -10,7 +10,7 @@
import weakref
from collections.abc import MutableMapping
from test import mapping_tests, support
-from test.support import import_helper
+from test.support import import_helper, suppress_immortalization
py_coll = import_helper.import_fresh_module('collections',
@@ -667,6 +667,7 @@ def test_dict_update(self):
dict.update(od, [('spam', 1)])
self.assertNotIn('NULL', repr(od))
+ @suppress_immortalization()
def test_reference_loop(self):
# Issue 25935
OrderedDict = self.OrderedDict
diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py
index 15f6ee06ff..5508cc3eec 100644
--- a/Lib/test/test_struct.py
+++ b/Lib/test/test_struct.py
@@ -9,7 +9,7 @@
import weakref
from test import support
-from test.support import import_helper
+from test.support import import_helper, suppress_immortalization
from test.support.script_helper import assert_python_ok
ISBIGENDIAN = sys.byteorder == "big"
@@ -674,6 +674,7 @@ def __del__(self):
self.assertIn(b"Exception ignored in:", stderr)
self.assertIn(b"C.__del__", stderr)
+ @suppress_immortalization()
def test__struct_reference_cycle_cleaned_up(self):
# Regression test for python/cpython#94207.

View file

@ -0,0 +1,133 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
Date: Wed, 12 Aug 2026 15:18:39 +0200
Subject: 00466: Downstream only: Lower XML_COMBINED_VERSION threshold for
reparse deferral
RHEL 9 expat 2.5.0 has XML_SetReparseDeferralEnabled backported
via the CVE-2023-52425 fix, but XML_COMBINED_VERSION remains 20500.
CPython's #if XML_COMBINED_VERSION >= 20600 guards compile the setter
as a no-op, so SetReparseDeferralEnabled silently does nothing and
GetReparseDeferralEnabled always returns False, even though the expat
library actually supports (and enables) reparse deferral.
Lower the threshold from 20600 to 20500 so that CPython uses the
backported function. This makes the Python API actually work on RHEL 9
and fixes test failures (test_reparse_deferral_disabled,
test_flush_reparse_deferral_disabled, test_simple_xml_chunk_*).
The spec file BuildRequires expat-devel >= 2.5.0-2 to ensure the
backported function is available.
---
Lib/test/test_pyexpat.py | 6 +++---
Lib/test/test_sax.py | 4 ++--
Lib/test/test_xml_etree.py | 4 ++--
Modules/pyexpat.c | 6 +++---
4 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py
index ae7cec6540..7f73a8c5e7 100644
--- a/Lib/test/test_pyexpat.py
+++ b/Lib/test/test_pyexpat.py
@@ -1001,7 +1001,7 @@ def test_error_path_no_crash(self):
class ReparseDeferralTest(unittest.TestCase):
def test_getter_setter_round_trip(self):
parser = expat.ParserCreate()
- enabled = (expat.version_info >= (2, 6, 0))
+ enabled = (expat.version_info >= (2, 5, 0))
self.assertIs(parser.GetReparseDeferralEnabled(), enabled)
parser.SetReparseDeferralEnabled(False)
@@ -1010,7 +1010,7 @@ def test_getter_setter_round_trip(self):
self.assertIs(parser.GetReparseDeferralEnabled(), enabled)
def test_reparse_deferral_enabled(self):
- if expat.version_info < (2, 6, 0):
+ if expat.version_info < (2, 5, 0):
self.skipTest(f'Expat {expat.version_info} does not '
'support reparse deferral')
@@ -1041,7 +1041,7 @@ def start_element(name, _):
parser = expat.ParserCreate()
parser.StartElementHandler = start_element
- if expat.version_info >= (2, 6, 0):
+ if expat.version_info >= (2, 5, 0):
parser.SetReparseDeferralEnabled(False)
self.assertFalse(parser.GetReparseDeferralEnabled())
diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index 9b3014a94a..0e38c9488e 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -1215,7 +1215,7 @@ def test_expat_incremental_reset(self):
self.assertEqual(result.getvalue(), start + b"<doc>text</doc>")
- @unittest.skipIf(pyexpat.version_info < (2, 6, 0),
+ @unittest.skipIf(pyexpat.version_info < (2, 5, 0),
f'Expat {pyexpat.version_info} does not '
'support reparse deferral')
def test_flush_reparse_deferral_enabled(self):
@@ -1249,7 +1249,7 @@ def test_flush_reparse_deferral_disabled(self):
for chunk in ("<doc", ">"):
parser.feed(chunk)
- if pyexpat.version_info >= (2, 6, 0):
+ if pyexpat.version_info >= (2, 5, 0):
parser._parser.SetReparseDeferralEnabled(False)
self.assertEqual(result.getvalue(), start) # i.e. no elements started
diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py
index 4a76a5be1e..effb899d7b 100644
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -1804,7 +1804,7 @@ def test_unknown_event(self):
with self.assertRaisesRegex(ValueError, "unknown event 'bogus'"):
ET.XMLPullParser(events=(x.decode() for x in (b'start', b'end', b'bogus')))
- @unittest.skipIf(pyexpat.version_info < (2, 6, 0),
+ @unittest.skipIf(pyexpat.version_info < (2, 5, 0),
f'Expat {pyexpat.version_info} does not '
'support reparse deferral')
def test_flush_reparse_deferral_enabled(self):
@@ -1834,7 +1834,7 @@ def test_flush_reparse_deferral_disabled(self):
for chunk in ("<doc", ">"):
parser.feed(chunk)
- if pyexpat.version_info >= (2, 6, 0):
+ if pyexpat.version_info >= (2, 5, 0):
if not ET is pyET:
self.skipTest(f'XMLParser.(Get|Set)ReparseDeferralEnabled '
'methods not available in C')
diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c
index 9e5d84eb5e..b008fe66c1 100644
--- a/Modules/pyexpat.c
+++ b/Modules/pyexpat.c
@@ -781,7 +781,7 @@ pyexpat_xmlparser_SetReparseDeferralEnabled_impl(xmlparseobject *self,
int enabled)
/*[clinic end generated code: output=5ec539e3b63c8c49 input=021eb9e0bafc32c5]*/
{
-#if XML_COMBINED_VERSION >= 20600
+#if XML_COMBINED_VERSION >= 20500
XML_SetReparseDeferralEnabled(self->itself, enabled ? XML_TRUE : XML_FALSE);
self->reparse_deferral_enabled = (bool)enabled;
#endif
@@ -1446,7 +1446,7 @@ newxmlparseobject(pyexpat_state *state, const char *encoding,
self->ns_prefixes = 0;
self->handlers = NULL;
self->intern = Py_XNewRef(intern);
-#if XML_COMBINED_VERSION >= 20600
+#if XML_COMBINED_VERSION >= 20500
self->reparse_deferral_enabled = true;
#else
self->reparse_deferral_enabled = false;
@@ -2332,7 +2332,7 @@ pyexpat_exec(PyObject *mod)
#else
capi->SetHashSalt16Bytes = NULL;
#endif
-#if XML_COMBINED_VERSION >= 20600
+#if XML_COMBINED_VERSION >= 20500
capi->SetReparseDeferralEnabled = XML_SetReparseDeferralEnabled;
#else
capi->SetReparseDeferralEnabled = NULL;

View file

@ -0,0 +1,59 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Seth Michael Larson <seth@python.org>
Date: Tue, 20 Jan 2026 14:46:32 -0600
Subject: 00475: CVE-2025-15367
Reject control characters in POP3 commands
---
Lib/poplib.py | 2 ++
Lib/test/test_poplib.py | 8 ++++++++
.../2026-01-16-11-43-47.gh-issue-143923.DuytMe.rst | 1 +
3 files changed, 11 insertions(+)
create mode 100644 Misc/NEWS.d/next/Security/2026-01-16-11-43-47.gh-issue-143923.DuytMe.rst
diff --git a/Lib/poplib.py b/Lib/poplib.py
index 4469bff44b..b97274c5c3 100644
--- a/Lib/poplib.py
+++ b/Lib/poplib.py
@@ -122,6 +122,8 @@ def _putline(self, line):
def _putcmd(self, line):
if self._debugging: print('*cmd*', repr(line))
line = bytes(line, self.encoding)
+ if re.search(b'[\x00-\x1F\x7F]', line):
+ raise ValueError('Control characters not allowed in commands')
self._putline(line)
diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py
index eb6dab4015..bd621caee4 100644
--- a/Lib/test/test_poplib.py
+++ b/Lib/test/test_poplib.py
@@ -18,6 +18,7 @@
from test.support import asynchat
from test.support import asyncore
from test.support.testcase import ExtraAssertions
+from test.support import control_characters_c0
test_support.requires_working_socket(module=True)
@@ -396,6 +397,13 @@ def test_quit(self):
self.assertIsNone(self.client.sock)
self.assertIsNone(self.client.file)
+ def test_control_characters(self):
+ for c0 in control_characters_c0():
+ with self.assertRaises(ValueError):
+ self.client.user(f'user{c0}')
+ with self.assertRaises(ValueError):
+ self.client.pass_(f'{c0}pass')
+
@requires_ssl
def test_stls_capa(self):
capa = self.client.capa()
diff --git a/Misc/NEWS.d/next/Security/2026-01-16-11-43-47.gh-issue-143923.DuytMe.rst b/Misc/NEWS.d/next/Security/2026-01-16-11-43-47.gh-issue-143923.DuytMe.rst
new file mode 100644
index 0000000000..3cde4df3e0
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2026-01-16-11-43-47.gh-issue-143923.DuytMe.rst
@@ -0,0 +1 @@
+Reject control characters in POP3 commands.

View file

@ -0,0 +1,173 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <encukou@gmail.com>
Date: Mon, 9 Feb 2026 10:44:21 +0100
Subject: 00477: Raise an error when importing stdlib modules compiled for a
different Python version
This is a downstream workaround "implementing" python#137212 -
the mechanism for the check exists in Python 3.15+, where it needs to be
added to the standard library modules.
In Fedora, we need it also in previous Python versions, as we experience
segmentation fault when importing stdlib modules after update while
Python is running.
_curses, _tkinter, _tracemalloc and readline are not calling PyModuleDef_Init,
which is modified with this patch, hence they need a
direct call to the check function.
Co-Authored-By: Karolina Surma <ksurma@redhat.com>
---
Include/moduleobject.h | 43 +++++++++++++++++++++++++++++++++++++++++
Makefile.pre.in | 3 +++
Modules/_cursesmodule.c | 6 ++++++
Modules/_tkinter.c | 6 ++++++
Modules/_tracemalloc.c | 6 ++++++
Modules/readline.c | 6 ++++++
Objects/moduleobject.c | 1 +
7 files changed, 71 insertions(+)
diff --git a/Include/moduleobject.h b/Include/moduleobject.h
index 2a17c891dd..64017c666c 100644
--- a/Include/moduleobject.h
+++ b/Include/moduleobject.h
@@ -116,6 +116,49 @@ struct PyModuleDef {
freefunc m_free;
};
+#if defined(_PyHack_check_version_on_modinit) && defined(Py_BUILD_CORE)
+/* The mechanism for the check has been implemented on Python 3.15+:
+ * https://github.com/python/cpython/pull/137212.
+ * In Fedora, we need this in older Pythons too:
+ * if somebody attempts to import a module compiled for a different Python version,
+ * instead of segmentation fault a meaningful error is raised.
+ */
+PyAPI_DATA(const unsigned long) Py_Version;
+
+static inline int
+_PyHack_CheckInternalAPIVersion(const char *mod_name)
+{
+ if (PY_VERSION_HEX != Py_Version) {
+ PyErr_Format(
+ PyExc_ImportError,
+ "internal Python C API version mismatch: "
+ "module %s compiled with %lu.%lu.%lu; "
+ "runtime version is %lu.%lu.%lu",
+ mod_name,
+ (const unsigned long)((PY_VERSION_HEX >> 24) & 0xFF),
+ (const unsigned long)((PY_VERSION_HEX >> 16) & 0xFF),
+ (const unsigned long)((PY_VERSION_HEX >> 8) & 0xFF),
+ (const unsigned long)((Py_Version >> 24) & 0xFF),
+ (const unsigned long)((Py_Version >> 16) & 0xFF),
+ (const unsigned long)((Py_Version >> 8) & 0xFF)
+ );
+ return -1;
+ }
+ return 0;
+}
+
+static inline PyObject *
+PyModuleDef_Init_with_check(PyModuleDef *def)
+{
+ if (_PyHack_CheckInternalAPIVersion(def->m_name) < 0) {
+ return NULL;
+ }
+ return PyModuleDef_Init(def);
+}
+
+#define PyModuleDef_Init PyModuleDef_Init_with_check
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 2363b99a25..f1a07645f0 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -3159,3 +3159,6 @@ MODULE__MULTIBYTECODEC_DEPS=$(srcdir)/Modules/cjkcodecs/multibytecodec.h
# Local Variables:
# mode: makefile
# End:
+
+# Fedora-specific, downstream only
+PY_STDMODULE_CFLAGS += -D_PyHack_check_version_on_modinit=1
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index 1996488a0e..cfdffd8ec4 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -5011,6 +5011,12 @@ curses_destructor(PyObject *op)
PyMODINIT_FUNC
PyInit__curses(void)
{
+ #ifdef _PyHack_check_version_on_modinit
+ if (_PyHack_CheckInternalAPIVersion("_curses") < 0) {
+ return NULL;
+ }
+ #endif
+
PyObject *m, *d, *v, *c_api_object;
/* Initialize object type */
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 4e8d75e8e1..32e58755aa 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -3499,6 +3499,12 @@ static struct PyModuleDef _tkintermodule = {
PyMODINIT_FUNC
PyInit__tkinter(void)
{
+ #ifdef _PyHack_check_version_on_modinit
+ if (_PyHack_CheckInternalAPIVersion("_tkinter") < 0) {
+ return NULL;
+ }
+ #endif
+
PyObject *m, *uexe, *cexe;
tcl_lock = PyThread_allocate_lock();
diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c
index 0b85187e5f..87f358ed07 100644
--- a/Modules/_tracemalloc.c
+++ b/Modules/_tracemalloc.c
@@ -215,6 +215,12 @@ static struct PyModuleDef module_def = {
PyMODINIT_FUNC
PyInit__tracemalloc(void)
{
+ #ifdef _PyHack_check_version_on_modinit
+ if (_PyHack_CheckInternalAPIVersion("_tracemalloc") < 0) {
+ return NULL;
+ }
+ #endif
+
PyObject *m;
m = PyModule_Create(&module_def);
if (m == NULL)
diff --git a/Modules/readline.c b/Modules/readline.c
index 7a612deae4..8b2f47eec1 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -1548,6 +1548,12 @@ static struct PyModuleDef readlinemodule = {
PyMODINIT_FUNC
PyInit_readline(void)
{
+ #ifdef _PyHack_check_version_on_modinit
+ if (_PyHack_CheckInternalAPIVersion("readline") < 0) {
+ return NULL;
+ }
+ #endif
+
const char *backend = "readline";
PyObject *m;
readlinestate *mod_state;
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index d787f29004..31175ceb3f 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -43,6 +43,7 @@ _PyModule_IsExtension(PyObject *obj)
}
+#undef PyModuleDef_Init
PyObject*
PyModuleDef_Init(PyModuleDef* def)
{

77
plan.fmf Normal file
View file

@ -0,0 +1,77 @@
execute:
how: tmt
provision:
hardware:
memory: '>= 3 GB'
environment:
pybasever: '3.13'
discover:
- name: tests_python
how: shell
url: https://src.fedoraproject.org/tests/python.git
tests:
- name: smoke
path: /smoke
test: "VERSION=${pybasever} CYTHON=false ./venv.sh"
- name: smoke_virtualenv
path: /smoke
test: "VERSION=${pybasever} METHOD=virtualenv CYTHON=false ./venv.sh"
- name: debugsmoke
path: /smoke
test: "PYTHON=python${pybasever}d TOX=false VERSION=${pybasever} CYTHON=false ./venv.sh"
- name: selftest
path: /selftest
test: "VERSION=${pybasever} X='-i test_check_probes' ./parallel.sh"
- name: debugtest
path: /selftest
test: "VERSION=${pybasever} PYTHON=python${pybasever}d X='-i test_check_probes' ./parallel.sh"
- name: optimizedflags
path: /flags
test: "python${pybasever} ./assertflags.py -O3 CFLAGS PY_BUILTIN_MODULE_CFLAGS PY_CFLAGS PY_CORE_CFLAGS PY_CFLAGS_NODIST PY_STDMODULE_CFLAGS"
- name: debugflags
path: /flags
test: "python${pybasever}d ./assertflags.py -O0 CFLAGS PY_BUILTIN_MODULE_CFLAGS PY_CFLAGS PY_CORE_CFLAGS PY_CFLAGS_NODIST PY_STDMODULE_CFLAGS"
- name: freethreadingflags
path: /flags
test: "python${pybasever}t ./assertflags.py -O3 CFLAGS PY_BUILTIN_MODULE_CFLAGS PY_CFLAGS PY_CORE_CFLAGS PY_CFLAGS_NODIST PY_STDMODULE_CFLAGS"
- name: freethreadingdebugflags
path: /flags
test: "python${pybasever}td ./assertflags.py -O0 CFLAGS PY_BUILTIN_MODULE_CFLAGS PY_CFLAGS PY_CORE_CFLAGS PY_CFLAGS_NODIST PY_STDMODULE_CFLAGS"
- name: marshalparser
path: /marshalparser
test: "VERSION=${pybasever} SAMPLE=10 ./test_marshalparser_compatibility.sh"
- name: required_symbols
path: /required-symbols
test: "VERSION=${pybasever} ./check.sh"
prepare:
- name: Install dependencies
how: install
package:
- gcc # for extension building in venv and selftest
- gcc-c++ # for test_cppext
- gdb # for test_gdb
- "python${pybasever}" # the test subject
- "python${pybasever}-debug" # for leak testing
- "python${pybasever}-devel" # for extension building in venv and selftest
- "python${pybasever}-tkinter" # for selftest
- "python${pybasever}-test" # for selftest
- "python${pybasever}-freethreading" # for -O... flag test
- "python${pybasever}-freethreading-debug" # for -O... flag test
- tox # for venv tests
- virtualenv # for virtualenv tests
- glibc-all-langpacks # for locale tests
- marshalparser # for testing compatibility (magic numbers) with marshalparser
- binutils # for nm (symbol inspection)
- rpm # for debugging
- dnf # for upgrade and downgrade
- name: Update packages
how: shell
script: dnf upgrade -y
- name: rpm_qa
order: 100
how: shell
script: rpm -qa | sort | tee $TMT_PLAN_DATA/rpmqa.txt

File diff suppressed because it is too large Load diff

View file

@ -1,22 +1,22 @@
# exclude test XML data (not always valid) from XML validity check:
xml:
ignore:
- /usr/lib*/python*/test/xmltestdata/*
- /usr/lib*/python*/test/xmltestdata/*/*
- '/usr/lib*/python*/test/xmltestdata/*'
- '/usr/lib*/python*/test/xmltestdata/*/*'
# exclude _socket from ipv4 only functions check, it has both ipv4 and ipv6 only
badfuncs:
allowed:
/usr/lib*/python*/lib-dynload/_socket.*:
'/usr/lib*/python*/lib-dynload/_socket.*':
- inet_aton
- inet_ntoa
# exclude the debug build from annocheck entirely
annocheck:
ignore:
- /usr/bin/python*d
- /usr/lib*/libpython*d.so.1.0
- /usr/lib*/python*/lib-dynload/*.cpython-*d-*-*-*.so
- '/usr/bin/python*d'
- '/usr/lib*/libpython*d.so.1.0'
- '/usr/lib*/python*/lib-dynload/*.cpython-*d-*-*-*.so'
# don't report changed content of compiled files
# that is expected with every toolchain update and not reproducible yet

View file

@ -6,7 +6,7 @@ Filters = [
# TESTS:
'(zero-length|pem-certificate|uncompressed-zip) /usr/lib(64)?/python3\.\d+/test',
'(zero-length|pem-certificate|uncompressed-zip) /usr/lib(64)?/python3\.\d+t?/test',
# OTHER DELIBERATES:
@ -14,7 +14,7 @@ Filters = [
'missing-call-to-chdir-with-chroot',
# gethostbyname function calls gethostbyname
'(E|W): binary-or-shlib-calls-gethostbyname /usr/lib(64)?/python3\.\d+/lib-dynload/_socket\.',
'(E|W): binary-or-shlib-calls-gethostbyname /usr/lib(64)?/python3\.\d+t?/lib-dynload/_socket\.',
# intentionally unversioned and selfobsoleted
'unversioned-explicit-obsoletes python',
@ -28,18 +28,18 @@ Filters = [
'only-non-binary-in-usr-lib',
# some devel files that are deliberately needed
'devel-file-in-non-devel-package /usr/include/python3\.\d+m?/pyconfig-(32|64)\.h',
'devel-file-in-non-devel-package /usr/lib(64)?/python3\.\d+/distutils/tests/xxmodule\.c',
'devel-file-in-non-devel-package /usr/include/python3\.\d+m?t?/pyconfig-(32|64)\.h',
'devel-file-in-non-devel-package /usr/lib(64)?/python3\.\d+t?/distutils/tests/xxmodule\.c',
# ...or are used as test data
'devel-file-in-non-devel-package /usr/lib(64)?/python3\.\d+/test',
'devel-file-in-non-devel-package /usr/lib(64)?/python3\.\d+t?/test',
# some bytecode is shipped without sources on purpose, as a space optimization
# if this regex needs to be relaxed in the future, make sure it **does not** match pyc files in __pycache__
'python-bytecode-without-source /usr/lib(64)?/python3\.\d+/(encodings|pydoc_data)/[^/]+.pyc',
'python-bytecode-without-source /usr/lib(64)?/python3\.\d+t?/(encodings|pydoc_data)/[^/]+.pyc',
# DUPLICATE FILES
# test data are often duplicated
'(E|W): files-duplicate /usr/lib(64)?/python3\.\d+/(test|__phello__)/',
'(E|W): files-duplicate /usr/lib(64)?/python3\.\d+t?/(test|__phello__)/',
# duplicated inits or mains are also common
'(E|W): files-duplicate .+__init__\.py.+__init__\.py',
'(E|W): files-duplicate .+__main__\.py.+__main__\.py',
@ -101,6 +101,6 @@ Filters = [
'\bpython3(\.\d+)?\.(src|spec): (E|W): specfile-error\s+$',
# SPELLING ERRORS
'spelling-error .* en_US (bytecode|pyc|filename|tkinter|namespaces|pytest) ',
'spelling-error .* en_US (bytecode|pyc|filename|tkinter|namespaces|pytest|unittest|gil) ',
]

View file

@ -1,2 +1,2 @@
SHA512 (Python-3.13.0b1.tar.xz) = 81cc1d8691bfcc8f8bb232ea15c18039d0df036f5cbc1667fec3b6c34cdf198bed97418ec775c037778c250b7bc4f35bd5fb938dd478cc17fc48c74b8a2b2d19
SHA512 (Python-3.13.0b1.tar.xz.asc) = c10832b5016ad9a9588b7efd29a35272c1c07b444df116c397fed82d66f30150687d68a6853637094be2fe1d8ed0928a9cd151617c91d9eb9938ba1385bd7143
SHA512 (Python-3.13.15.tar.xz) = b0ab766a3de0b4cfdbf0b93300d7330c734d3f7057577bb03e95e39da4cdade81993e769c7fa6dfdcc13b9d43a3b399d9cd89b5477b413662e9e691c1b7886b8
SHA512 (Python-3.13.15.tar.xz.asc) = 662c00be95f62e80db43cf42099fef91f764ff7a4433cadf7eb19dedb5e4775adb12878d5ed2295fcea187731de186163ad9672ab72cde62a2335ca58ec1ad86

View file

@ -1,4 +0,0 @@
---
standard-inventory-qcow2:
qemu:
m: 3G # Amount of VM memory

View file

@ -1,67 +0,0 @@
---
- hosts: localhost
tags:
- classic
tasks:
- dnf:
name: "*"
state: latest
- hosts: localhost
roles:
- role: standard-test-basic
tags:
- classic
repositories:
- repo: "https://src.fedoraproject.org/tests/python.git"
dest: "python"
pybasever: "3.13"
tests:
- rpm_qa:
run: rpm -qa
- smoke:
dir: python/smoke
run: "VERSION={{ pybasever }} CYTHON=false ./venv.sh"
- smoke_virtualenv:
dir: python/smoke
run: "VERSION={{ pybasever }} METHOD=virtualenv CYTHON=false ./venv.sh"
- debugsmoke:
dir: python/smoke
run: "PYTHON=python{{ pybasever }}d TOX=false VERSION={{ pybasever }} CYTHON=false ./venv.sh"
- selftest:
dir: python/selftest
run: "VERSION={{ pybasever }} X='-i test_check_probes' ./parallel.sh"
- debugtest:
dir: python/selftest
run: "VERSION={{ pybasever }} PYTHON=python{{ pybasever }}d X='-i test_check_probes' ./parallel.sh"
- optimizedflags:
dir: python/flags
run: "python{{ pybasever }} ./assertflags.py -O3"
- debugflags:
dir: python/flags
run: "python{{ pybasever }}d ./assertflags.py -O0"
- freethreadingflags:
dir: python/flags
run: "python{{ pybasever }}t ./assertflags.py -O3"
- freethreadingdebugflags:
dir: python/flags
run: "python{{ pybasever }}td ./assertflags.py -O0"
- marshalparser:
dir: python/marshalparser
run: "VERSION={{ pybasever }} SAMPLE=10 test_marshalparser_compatibility.sh"
required_packages:
- gcc # for extension building in venv and selftest
- gcc-c++ # for test_cppext
- gdb # for test_gdb
- "python{{ pybasever }}" # the test subject
- "python{{ pybasever }}-debug" # for leak testing
- "python{{ pybasever }}-devel" # for extension building in venv and selftest
- "python{{ pybasever }}-tkinter" # for selftest
- "python{{ pybasever }}-test" # for selftest
- "python{{ pybasever }}-freethreading" # for -O... flag test
- "python{{ pybasever }}-freethreading-debug" # for -O... flag test
- tox # for venv tests
- virtualenv # for virtualenv tests
- glibc-all-langpacks # for locale tests
- marshalparser # for testing compatibility (magic numbers) with marshalparser
- rpm # for debugging