Compare commits
3 Commits
| Author | SHA256 | Date | |
|---|---|---|---|
|
8d5231e0bf
|
|||
|
2725f9bae4
|
|||
|
4b93749109
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,4 +2,5 @@
|
|||||||
*.obscpio
|
*.obscpio
|
||||||
_build.*
|
_build.*
|
||||||
.pbuild
|
.pbuild
|
||||||
|
*.orig
|
||||||
python314-*-build/
|
python314-*-build/
|
||||||
|
|||||||
196
CVE-2025-12781-b64decode-alt-chars.patch
Normal file
196
CVE-2025-12781-b64decode-alt-chars.patch
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
From f922c02c529d25d61aa9c28a8192639c1fce8d4d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Serhiy Storchaka <storchaka@gmail.com>
|
||||||
|
Date: Wed, 5 Nov 2025 20:12:31 +0200
|
||||||
|
Subject: [PATCH] gh-125346: Add more base64 tests
|
||||||
|
|
||||||
|
Add more tests for the altchars argument of b64decode() and for the map01
|
||||||
|
argument of b32decode().
|
||||||
|
---
|
||||||
|
Doc/library/base64.rst | 18 ++--
|
||||||
|
Lib/base64.py | 40 +++++++-
|
||||||
|
Lib/test/test_base64.py | 45 ++++++++--
|
||||||
|
Misc/NEWS.d/next/Library/2025-11-06-12-03-29.gh-issue-125346.7Gfpgw.rst | 5 +
|
||||||
|
4 files changed, 91 insertions(+), 17 deletions(-)
|
||||||
|
|
||||||
|
Index: Python-3.14.2/Doc/library/base64.rst
|
||||||
|
===================================================================
|
||||||
|
--- Python-3.14.2.orig/Doc/library/base64.rst 2025-12-05 17:49:16.000000000 +0100
|
||||||
|
+++ Python-3.14.2/Doc/library/base64.rst 2026-02-03 18:10:52.115333313 +0100
|
||||||
|
@@ -77,15 +77,20 @@
|
||||||
|
A :exc:`binascii.Error` exception is raised
|
||||||
|
if *s* is incorrectly padded.
|
||||||
|
|
||||||
|
- If *validate* is ``False`` (the default), characters that are neither
|
||||||
|
+ If *validate* is false (the default), characters that are neither
|
||||||
|
in the normal base-64 alphabet nor the alternative alphabet are
|
||||||
|
- discarded prior to the padding check. If *validate* is ``True``,
|
||||||
|
- these non-alphabet characters in the input result in a
|
||||||
|
- :exc:`binascii.Error`.
|
||||||
|
+ discarded prior to the padding check, but the ``+`` and ``/`` characters
|
||||||
|
+ keep their meaning if they are not in *altchars* (they will be discarded
|
||||||
|
+ in future Python versions).
|
||||||
|
+ If *validate* is true, these non-alphabet characters in the input
|
||||||
|
+ result in a :exc:`binascii.Error`.
|
||||||
|
|
||||||
|
For more information about the strict base64 check, see :func:`binascii.a2b_base64`
|
||||||
|
|
||||||
|
- May assert or raise a :exc:`ValueError` if the length of *altchars* is not 2.
|
||||||
|
+ .. deprecated:: next
|
||||||
|
+ Accepting the ``+`` and ``/`` characters with an alternative alphabet
|
||||||
|
+ is now deprecated.
|
||||||
|
+
|
||||||
|
|
||||||
|
.. function:: standard_b64encode(s)
|
||||||
|
|
||||||
|
@@ -116,6 +121,9 @@
|
||||||
|
``/`` in the standard Base64 alphabet, and return the decoded
|
||||||
|
:class:`bytes`.
|
||||||
|
|
||||||
|
+ .. deprecated:: next
|
||||||
|
+ Accepting the ``+`` and ``/`` characters is now deprecated.
|
||||||
|
+
|
||||||
|
|
||||||
|
.. function:: b32encode(s)
|
||||||
|
|
||||||
|
Index: Python-3.14.2/Lib/base64.py
|
||||||
|
===================================================================
|
||||||
|
--- Python-3.14.2.orig/Lib/base64.py 2026-02-03 18:10:42.615516871 +0100
|
||||||
|
+++ Python-3.14.2/Lib/base64.py 2026-02-03 18:10:52.115801314 +0100
|
||||||
|
@@ -69,20 +69,39 @@
|
||||||
|
The result is returned as a bytes object. A binascii.Error is raised if
|
||||||
|
s is incorrectly padded.
|
||||||
|
|
||||||
|
- If validate is False (the default), characters that are neither in the
|
||||||
|
+ If validate is false (the default), characters that are neither in the
|
||||||
|
normal base-64 alphabet nor the alternative alphabet are discarded prior
|
||||||
|
- to the padding check. If validate is True, these non-alphabet characters
|
||||||
|
+ to the padding check. If validate is true, these non-alphabet characters
|
||||||
|
in the input result in a binascii.Error.
|
||||||
|
For more information about the strict base64 check, see:
|
||||||
|
|
||||||
|
https://docs.python.org/3.11/library/binascii.html#binascii.a2b_base64
|
||||||
|
"""
|
||||||
|
s = _bytes_from_decode_data(s)
|
||||||
|
+ badchar = None
|
||||||
|
if altchars is not None:
|
||||||
|
altchars = _bytes_from_decode_data(altchars)
|
||||||
|
- assert len(altchars) == 2, repr(altchars)
|
||||||
|
+ if len(altchars) != 2:
|
||||||
|
+ raise ValueError(f'invalid altchars: {altchars!r}')
|
||||||
|
+ for b in b'+/':
|
||||||
|
+ if b not in altchars and b in s:
|
||||||
|
+ badchar = b
|
||||||
|
+ break
|
||||||
|
s = s.translate(bytes.maketrans(altchars, b'+/'))
|
||||||
|
- return binascii.a2b_base64(s, strict_mode=validate)
|
||||||
|
+ result = binascii.a2b_base64(s, strict_mode=validate)
|
||||||
|
+ if badchar is not None:
|
||||||
|
+ import warnings
|
||||||
|
+ if validate:
|
||||||
|
+ warnings.warn(f'invalid character {chr(badchar)!a} in Base64 data '
|
||||||
|
+ f'with altchars={altchars!r} and validate=True '
|
||||||
|
+ f'will be an error in future Python versions',
|
||||||
|
+ DeprecationWarning, stacklevel=2)
|
||||||
|
+ else:
|
||||||
|
+ warnings.warn(f'invalid character {chr(badchar)!a} in Base64 data '
|
||||||
|
+ f'with altchars={altchars!r} and validate=False '
|
||||||
|
+ f'will be discarded in future Python versions',
|
||||||
|
+ FutureWarning, stacklevel=2)
|
||||||
|
+ return result
|
||||||
|
|
||||||
|
|
||||||
|
def standard_b64encode(s):
|
||||||
|
@@ -127,8 +146,19 @@
|
||||||
|
The alphabet uses '-' instead of '+' and '_' instead of '/'.
|
||||||
|
"""
|
||||||
|
s = _bytes_from_decode_data(s)
|
||||||
|
+ badchar = None
|
||||||
|
+ for b in b'+/':
|
||||||
|
+ if b in s:
|
||||||
|
+ badchar = b
|
||||||
|
+ break
|
||||||
|
s = s.translate(_urlsafe_decode_translation)
|
||||||
|
- return b64decode(s)
|
||||||
|
+ result = binascii.a2b_base64(s, strict_mode=False)
|
||||||
|
+ if badchar is not None:
|
||||||
|
+ import warnings
|
||||||
|
+ warnings.warn(f'invalid character {chr(badchar)!a} in URL-safe Base64 data '
|
||||||
|
+ f'will be discarded in future Python versions',
|
||||||
|
+ FutureWarning, stacklevel=2)
|
||||||
|
+ return result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Index: Python-3.14.2/Lib/test/test_base64.py
|
||||||
|
===================================================================
|
||||||
|
--- Python-3.14.2.orig/Lib/test/test_base64.py 2026-02-03 18:10:43.960993003 +0100
|
||||||
|
+++ Python-3.14.2/Lib/test/test_base64.py 2026-02-03 18:10:52.116085599 +0100
|
||||||
|
@@ -242,6 +242,25 @@
|
||||||
|
eq(base64.b64decode(data, altchars=altchars_str), res)
|
||||||
|
eq(base64.b64decode(data_str, altchars=altchars_str), res)
|
||||||
|
|
||||||
|
+ def test_b64decode_altchars(self):
|
||||||
|
+ # Test with arbitrary alternative characters
|
||||||
|
+ eq = self.assertEqual
|
||||||
|
+ res = b'\xd3V\xbeo\xf7\x1d'
|
||||||
|
+ for altchars in b'*$', b'+/', b'/+', b'+_', b'-+', b'-/', b'/_':
|
||||||
|
+ data = b'01a%cb%ccd' % tuple(altchars)
|
||||||
|
+ data_str = data.decode('ascii')
|
||||||
|
+ altchars_str = altchars.decode('ascii')
|
||||||
|
+
|
||||||
|
+ eq(base64.b64decode(data, altchars=altchars), res)
|
||||||
|
+ eq(base64.b64decode(data_str, altchars=altchars), res)
|
||||||
|
+ eq(base64.b64decode(data, altchars=altchars_str), res)
|
||||||
|
+ eq(base64.b64decode(data_str, altchars=altchars_str), res)
|
||||||
|
+
|
||||||
|
+ self.assertRaises(ValueError, base64.b64decode, b'', altchars=b'+')
|
||||||
|
+ self.assertRaises(ValueError, base64.b64decode, b'', altchars=b'+/-')
|
||||||
|
+ self.assertRaises(ValueError, base64.b64decode, '', altchars='+')
|
||||||
|
+ self.assertRaises(ValueError, base64.b64decode, '', altchars='+/-')
|
||||||
|
+
|
||||||
|
def test_b64decode_padding_error(self):
|
||||||
|
self.assertRaises(binascii.Error, base64.b64decode, b'abc')
|
||||||
|
self.assertRaises(binascii.Error, base64.b64decode, 'abc')
|
||||||
|
@@ -273,13 +292,25 @@
|
||||||
|
with self.assertRaises(binascii.Error):
|
||||||
|
base64.b64decode(bstr.decode('ascii'), validate=True)
|
||||||
|
|
||||||
|
- # Normal alphabet characters not discarded when alternative given
|
||||||
|
- res = b'\xfb\xef\xff'
|
||||||
|
- self.assertEqual(base64.b64decode(b'++//', validate=True), res)
|
||||||
|
- self.assertEqual(base64.b64decode(b'++//', '-_', validate=True), res)
|
||||||
|
- self.assertEqual(base64.b64decode(b'--__', '-_', validate=True), res)
|
||||||
|
- self.assertEqual(base64.urlsafe_b64decode(b'++//'), res)
|
||||||
|
- self.assertEqual(base64.urlsafe_b64decode(b'--__'), res)
|
||||||
|
+ # Normal alphabet characters will be discarded when alternative given
|
||||||
|
+ with self.assertWarns(FutureWarning):
|
||||||
|
+ self.assertEqual(base64.b64decode(b'++++', altchars=b'-_'),
|
||||||
|
+ b'\xfb\xef\xbe')
|
||||||
|
+ with self.assertWarns(FutureWarning):
|
||||||
|
+ self.assertEqual(base64.b64decode(b'////', altchars=b'-_'),
|
||||||
|
+ b'\xff\xff\xff')
|
||||||
|
+ with self.assertWarns(DeprecationWarning):
|
||||||
|
+ self.assertEqual(base64.b64decode(b'++++', altchars=b'-_', validate=True),
|
||||||
|
+ b'\xfb\xef\xbe')
|
||||||
|
+ with self.assertWarns(DeprecationWarning):
|
||||||
|
+ self.assertEqual(base64.b64decode(b'////', altchars=b'-_', validate=True),
|
||||||
|
+ b'\xff\xff\xff')
|
||||||
|
+ with self.assertWarns(FutureWarning):
|
||||||
|
+ self.assertEqual(base64.urlsafe_b64decode(b'++++'), b'\xfb\xef\xbe')
|
||||||
|
+ with self.assertWarns(FutureWarning):
|
||||||
|
+ self.assertEqual(base64.urlsafe_b64decode(b'////'), b'\xff\xff\xff')
|
||||||
|
+ with self.assertRaises(binascii.Error):
|
||||||
|
+ base64.b64decode(b'+/!', altchars=b'-_')
|
||||||
|
|
||||||
|
def test_b32encode(self):
|
||||||
|
eq = self.assertEqual
|
||||||
|
Index: Python-3.14.2/Misc/NEWS.d/next/Library/2025-11-06-12-03-29.gh-issue-125346.7Gfpgw.rst
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ Python-3.14.2/Misc/NEWS.d/next/Library/2025-11-06-12-03-29.gh-issue-125346.7Gfpgw.rst 2026-02-03 18:10:52.116411403 +0100
|
||||||
|
@@ -0,0 +1,5 @@
|
||||||
|
+Accepting ``+`` and ``/`` characters with an alternative alphabet in
|
||||||
|
+:func:`base64.b64decode` and :func:`base64.urlsafe_b64decode` is now
|
||||||
|
+deprecated.
|
||||||
|
+In future Python versions they will be errors in the strict mode and
|
||||||
|
+discarded in the non-strict mode.
|
||||||
56
CVE-2025-15367-poplib-ctrl-chars.patch
Normal file
56
CVE-2025-15367-poplib-ctrl-chars.patch
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
From b6f733b285b1c4f27dacb5c2e1f292c914e8b933 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Seth Michael Larson <seth@python.org>
|
||||||
|
Date: Fri, 16 Jan 2026 10:54:09 -0600
|
||||||
|
Subject: [PATCH 1/2] Add 'test.support' fixture for C0 control characters
|
||||||
|
|
||||||
|
---
|
||||||
|
Lib/poplib.py | 2 ++
|
||||||
|
Lib/test/test_poplib.py | 8 ++++++++
|
||||||
|
Misc/NEWS.d/next/Security/2026-01-16-11-43-47.gh-issue-143923.DuytMe.rst | 1 +
|
||||||
|
3 files changed, 11 insertions(+)
|
||||||
|
|
||||||
|
Index: Python-3.14.2/Lib/poplib.py
|
||||||
|
===================================================================
|
||||||
|
--- Python-3.14.2.orig/Lib/poplib.py 2026-02-04 22:23:00.168506856 +0100
|
||||||
|
+++ Python-3.14.2/Lib/poplib.py 2026-02-04 22:23:04.642467762 +0100
|
||||||
|
@@ -122,6 +122,8 @@
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
Index: Python-3.14.2/Lib/test/test_poplib.py
|
||||||
|
===================================================================
|
||||||
|
--- Python-3.14.2.orig/Lib/test/test_poplib.py 2026-02-04 22:23:01.857420849 +0100
|
||||||
|
+++ Python-3.14.2/Lib/test/test_poplib.py 2026-02-04 22:23:04.642886463 +0100
|
||||||
|
@@ -17,6 +17,7 @@
|
||||||
|
from test.support import threading_helper
|
||||||
|
from test.support import asynchat
|
||||||
|
from test.support import asyncore
|
||||||
|
+from test.support import control_characters_c0
|
||||||
|
|
||||||
|
|
||||||
|
test_support.requires_working_socket(module=True)
|
||||||
|
@@ -395,6 +396,13 @@
|
||||||
|
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()
|
||||||
|
Index: Python-3.14.2/Misc/NEWS.d/next/Security/2026-01-16-11-43-47.gh-issue-143923.DuytMe.rst
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ Python-3.14.2/Misc/NEWS.d/next/Security/2026-01-16-11-43-47.gh-issue-143923.DuytMe.rst 2026-02-04 22:23:04.643241399 +0100
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+Reject control characters in POP3 commands.
|
||||||
68
CVE-2026-0865-wsgiref-ctrl-chars.patch
Normal file
68
CVE-2026-0865-wsgiref-ctrl-chars.patch
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
From e7f180b4c21576f52c08933a184d84dc4b47e00e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Seth Michael Larson <seth@python.org>
|
||||||
|
Date: Fri, 16 Jan 2026 10:54:09 -0600
|
||||||
|
Subject: [PATCH 1/2] Add 'test.support' fixture for C0 control characters
|
||||||
|
|
||||||
|
---
|
||||||
|
Lib/test/test_wsgiref.py | 12 +++++++++-
|
||||||
|
Lib/wsgiref/headers.py | 3 ++
|
||||||
|
Misc/NEWS.d/next/Security/2026-01-16-11-07-36.gh-issue-143916.dpWeOD.rst | 2 +
|
||||||
|
3 files changed, 16 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: Python-3.14.2/Lib/test/test_wsgiref.py
|
||||||
|
===================================================================
|
||||||
|
--- Python-3.14.2.orig/Lib/test/test_wsgiref.py 2026-02-04 09:48:18.748809337 +0100
|
||||||
|
+++ Python-3.14.2/Lib/test/test_wsgiref.py 2026-02-04 09:48:33.549108531 +0100
|
||||||
|
@@ -1,6 +1,6 @@
|
||||||
|
from unittest import mock
|
||||||
|
from test import support
|
||||||
|
-from test.support import socket_helper
|
||||||
|
+from test.support import socket_helper, control_characters_c0
|
||||||
|
from test.test_httpservers import NoLogRequestHandler
|
||||||
|
from unittest import TestCase
|
||||||
|
from wsgiref.util import setup_testing_defaults
|
||||||
|
@@ -503,6 +503,16 @@
|
||||||
|
'\r\n'
|
||||||
|
)
|
||||||
|
|
||||||
|
+ def testRaisesControlCharacters(self):
|
||||||
|
+ headers = Headers()
|
||||||
|
+ for c0 in control_characters_c0():
|
||||||
|
+ self.assertRaises(ValueError, headers.__setitem__, f"key{c0}", "val")
|
||||||
|
+ self.assertRaises(ValueError, headers.__setitem__, "key", f"val{c0}")
|
||||||
|
+ self.assertRaises(ValueError, headers.add_header, f"key{c0}", "val", param="param")
|
||||||
|
+ self.assertRaises(ValueError, headers.add_header, "key", f"val{c0}", param="param")
|
||||||
|
+ self.assertRaises(ValueError, headers.add_header, "key", "val", param=f"param{c0}")
|
||||||
|
+
|
||||||
|
+
|
||||||
|
class ErrorHandler(BaseCGIHandler):
|
||||||
|
"""Simple handler subclass for testing BaseHandler"""
|
||||||
|
|
||||||
|
Index: Python-3.14.2/Lib/wsgiref/headers.py
|
||||||
|
===================================================================
|
||||||
|
--- Python-3.14.2.orig/Lib/wsgiref/headers.py 2026-02-04 09:48:19.030042448 +0100
|
||||||
|
+++ Python-3.14.2/Lib/wsgiref/headers.py 2026-02-04 09:48:33.549531075 +0100
|
||||||
|
@@ -9,6 +9,7 @@
|
||||||
|
# existence of which force quoting of the parameter value.
|
||||||
|
import re
|
||||||
|
tspecials = re.compile(r'[ \(\)<>@,;:\\"/\[\]\?=]')
|
||||||
|
+_control_chars_re = re.compile(r'[\x00-\x1F\x7F]')
|
||||||
|
|
||||||
|
def _formatparam(param, value=None, quote=1):
|
||||||
|
"""Convenience function to format and return a key=value pair.
|
||||||
|
@@ -41,6 +42,8 @@
|
||||||
|
def _convert_string_type(self, value):
|
||||||
|
"""Convert/check value type."""
|
||||||
|
if type(value) is str:
|
||||||
|
+ if _control_chars_re.search(value):
|
||||||
|
+ raise ValueError("Control characters not allowed in headers")
|
||||||
|
return value
|
||||||
|
raise AssertionError("Header names/values must be"
|
||||||
|
" of type str (got {0})".format(repr(value)))
|
||||||
|
Index: Python-3.14.2/Misc/NEWS.d/next/Security/2026-01-16-11-07-36.gh-issue-143916.dpWeOD.rst
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ Python-3.14.2/Misc/NEWS.d/next/Security/2026-01-16-11-07-36.gh-issue-143916.dpWeOD.rst 2026-02-04 09:48:33.549806881 +0100
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
+Reject C0 control characters within wsgiref.headers.Headers fields, values,
|
||||||
|
+and parameters.
|
||||||
@@ -1,3 +1,18 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 4 00:53:37 UTC 2026 - Matej Cepl <mcepl@cepl.eu>
|
||||||
|
|
||||||
|
- Add CVE-2025-12781-b64decode-alt-chars.patch fixing bsc#1257108
|
||||||
|
(CVE-2025-12781) combining gh#python/cpython!141061,
|
||||||
|
gh#python/cpython!141128, and gh#python/cpython!141153. All
|
||||||
|
`*b64decode` functions should not accept non-altchars.
|
||||||
|
- Add CVE-2026-0865-wsgiref-ctrl-chars.patch fixing bsc#1257042
|
||||||
|
(CVE-2026-0865) rejecting control characters in
|
||||||
|
wsgiref.headers.Headers, which could be abused for injecting
|
||||||
|
false HTTP headers.
|
||||||
|
- Add CVE-2025-15367-poplib-ctrl-chars.patch fixing bsc#1257041
|
||||||
|
(CVE-2025-15367) using gh#python/cpython!143924 and doing
|
||||||
|
basically the same as the previous patch for poplib library.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Jan 29 12:58:15 UTC 2026 - Matej Cepl <mcepl@cepl.eu>
|
Thu Jan 29 12:58:15 UTC 2026 - Matej Cepl <mcepl@cepl.eu>
|
||||||
|
|
||||||
|
|||||||
@@ -234,6 +234,15 @@ Patch47: CVE-2025-11468-email-hdr-fold-comment.patch
|
|||||||
# PATCH-FIX-UPSTREAM CVE-2026-0672-http-hdr-inject-cookie-Morsel.patch bsc#1257031 mcepl@suse.com
|
# PATCH-FIX-UPSTREAM CVE-2026-0672-http-hdr-inject-cookie-Morsel.patch bsc#1257031 mcepl@suse.com
|
||||||
# Reject control characters in http cookies
|
# Reject control characters in http cookies
|
||||||
Patch48: CVE-2026-0672-http-hdr-inject-cookie-Morsel.patch
|
Patch48: CVE-2026-0672-http-hdr-inject-cookie-Morsel.patch
|
||||||
|
# PATCH-FIX-UPSTREAM CVE-2025-12781-b64decode-alt-chars.patch bsc#1257108 mcepl@suse.com
|
||||||
|
# Fix decoding with non-standard Base64 alphabet gh#python/cpython#125346
|
||||||
|
Patch49: CVE-2025-12781-b64decode-alt-chars.patch
|
||||||
|
# PATCH-FIX-UPSTREAM CVE-2026-0865-wsgiref-ctrl-chars.patch bsc#1257042 mcepl@suse.com
|
||||||
|
# Reject control characters in wsgiref.headers.Headers
|
||||||
|
Patch50: CVE-2026-0865-wsgiref-ctrl-chars.patch
|
||||||
|
# PATCH-FIX-UPSTREAM CVE-2025-15367-poplib-ctrl-chars.patch bsc#1257041 mcepl@suse.com
|
||||||
|
# Reject control characters in poplib
|
||||||
|
Patch51: CVE-2025-15367-poplib-ctrl-chars.patch
|
||||||
#### Python 3.14 END OF PATCHES
|
#### Python 3.14 END OF PATCHES
|
||||||
BuildRequires: autoconf-archive
|
BuildRequires: autoconf-archive
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
|
|||||||
Reference in New Issue
Block a user