Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python313 for openSUSE:Factory checked in at 2024-08-08 10:58:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python313 (Old) and /work/SRC/openSUSE:Factory/.python313.new.7232 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python313" Thu Aug 8 10:58:35 2024 rev:4 rq:1192376 version:3.13.0~rc1 Changes: -------- --- /work/SRC/openSUSE:Factory/python313/python313.changes 2024-07-25 16:00:13.093893554 +0200 +++ /work/SRC/openSUSE:Factory/.python313.new.7232/python313.changes 2024-08-08 10:59:07.821425586 +0200 @@ -1,0 +2,97 @@ +Wed Aug 7 13:40:44 UTC 2024 - Matej Cepl <mc...@cepl.eu> + +- 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 + +------------------------------------------------------------------- +Thu Aug 1 10:35:25 UTC 2024 - Matej Cepl <mc...@cepl.eu> + +- 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 <g...@krypto.org> and Seth Larson + <s...@python.org>. Reported by Ellie <e...@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 + objects. + - gh-122170: Handle ValueErrors raised by os.stat() in + linecache. Patch by Bénédikt Tran. + - gh-82951: Serializing objects with complex __qualname__ + (such as unbound methods and nested classes) by name no + longer involves serializing parent objects by value in + pickle protocols < 4. + - gh-113785: csv now correctly parses numeric fields (when + used with csv.QUOTE_NONNUMERIC or csv.QUOTE_STRINGS) which + start with an escape character. + - gh-122088: @warnings.deprecated now copies the + coroutine status of functions and methods so that + inspect.iscoroutinefunction() returns the correct result. + - gh-120930: Fixed a bug introduced by gh-92081 that added an + incorrect extra blank to encoded words occurring in wrapped + headers. + - gh-121474: Fix missing sanity check for parties arg in + threading.Barrier constructor. Patch by Clinton Christian + (pygeek). + - gh-120289: Fixed the use-after-free issue in cProfile by + disallowing disable() and clear() in external timers. + - IDLE + - gh-122482: Change About IDLE to direct users to + discuss.python.org instead of the now unused idle-dev email + and mailing list. + - Core and Builtins + - gh-116090: Fix an issue in JIT builds that prevented some + for loops from correctly firing RAISE monitoring events. + - gh-122208: Dictionary watchers now only deliver the + PyDict_EVENT_ADDED event when the insertion is in a known + good state to succeed. + - gh-122300: Preserve AST nodes for f-string with + single-element format specifiers. Patch by Pablo Galindo + - gh-122029: Emit c_call events in sys.setprofile() when a + PyMethodObject pointing to a PyCFunction is called. + - gh-122026: Fix a bug that caused the tokenizer to not + correctly identify mismatched parentheses inside f-strings + in some situations. Patch by Pablo Galindo + - gh-118934: Make PyEval_GetLocals return borrowed reference + - C API + - gh-116622: Make PyObject_Print work around a bug in Android + and OpenBSD which prevented it from throwing an exception + when trying to write to a read-only stream. + - gh-121489: Export private _PyBytes_Join() again. + - Build + - gh-120522: Added a --with-app-store-compliance option to + patch out known issues with macOS/iOS App Store review + processes. + +------------------------------------------------------------------- @@ -151,0 +249 @@ +- Update bluez-devel-vendor.tar.xz vendored files. Old: ---- Python-3.13.0b4.tar.xz Python-3.13.0b4.tar.xz.asc New: ---- CVE-2024-6923-email-hdr-inject.patch Python-3.13.0rc1.tar.xz Python-3.13.0rc1.tar.xz.asc bso1227999-reproducible-builds.patch skip_test_abort_clients.patch BETA DEBUG BEGIN: New: - Add CVE-2024-6923-email-hdr-inject.patch to prevent email header injection due to unquoted newlines (bsc#1228780, New: CVE-2024-6923). - Adding bso1227999-reproducible-builds.patch fixing bsc#1227999 adding reproducibility patches from gh#python/cpython!121872 New: and gh#python/cpython!121883. - Add skip_test_abort_clients.patch (gh#python/cpython#122136) skip not yet fixed failing test BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python313.spec ++++++ --- /var/tmp/diff_new_pack.RqF8KQ/_old 2024-08-08 10:59:08.669460448 +0200 +++ /var/tmp/diff_new_pack.RqF8KQ/_new 2024-08-08 10:59:08.669460448 +0200 @@ -36,6 +36,12 @@ %bcond_without general %endif +%if 0%{?do_profiling} +%bcond_without profileopt +%else +%bcond_with profileopt +%endif + # Currently supported architectures # https://peps.python.org/pep-0744/#support %ifarch %{x86_64} aarch64 @@ -110,10 +116,9 @@ # pyexpat.cpython-35m-armv7-linux-gnueabihf # _md5.cpython-38m-x86_64-linux-gnu.so %define dynlib() %{sitedir}/lib-dynload/%{1}.cpython-%{abi_tag}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}.so -%bcond_without profileopt Name: %{python_pkg_name}%{psuffix} -Version: 3.13.0~b4 -%define tarversion 3.13.0b4 +Version: 3.13.0~rc1 +%define tarversion 3.13.0rc1 %define tarname Python-%{tarversion} Release: 0 Summary: Python 3 Interpreter @@ -172,6 +177,15 @@ # PATCH-FIX-SLE fix_configure_rst.patch bpo#43774 mc...@suse.com # remove duplicate link targets and make documentation with old Sphinx in SLE Patch10: fix_configure_rst.patch +# PATCH-FIX-UPSTREAM skip_test_abort_clients.patch gh#python/cpython#122136 mc...@suse.com +# Not yet fixed failing test +Patch11: skip_test_abort_clients.patch +# PATCH-FIX-UPSTREAM CVE-2024-6923-email-hdr-inject.patch bsc#1228780 mc...@suse.com +# prevent email header injection, patch from gh#python/cpython!122608 +Patch12: CVE-2024-6923-email-hdr-inject.patch +# PATCH-FIX-UPSTREAM bso1227999-reproducible-builds.patch bsc#1227999 mc...@suse.com +# reproducibility patches +Patch13: bso1227999-reproducible-builds.patch BuildRequires: autoconf-archive BuildRequires: automake BuildRequires: fdupes ++++++ CVE-2024-6923-email-hdr-inject.patch ++++++ >From a590277e980eaa8a08204b79ed6c62a763701c8b Mon Sep 17 00:00:00 2001 From: Petr Viktorin <encu...@gmail.com> Date: Wed, 31 Jul 2024 00:19:48 +0200 Subject: [PATCH] gh-121650: Encode newlines in headers, and verify headers are sound (GH-122233) GH-GH- Encode header parts that contain newlines Per RFC 2047: > [...] these encoding schemes allow the > encoding of arbitrary octet values, mail readers that implement this > decoding should also ensure that display of the decoded data on the > recipient's terminal will not cause unwanted side-effects It seems that the "quoted-word" scheme is a valid way to include a newline character in a header value, just like we already allow undecodable bytes or control characters. They do need to be properly quoted when serialized to text, though. GH-GH- Verify that email headers are well-formed This should fail for custom fold() implementations that aren't careful about newlines. (cherry picked from commit 097633981879b3c9de9a1dd120d3aa585ecc2384) Co-authored-by: Petr Viktorin <encu...@gmail.com> Co-authored-by: Bas Bloemsaat <b...@bloemsaat.org> Co-authored-by: Serhiy Storchaka <storch...@gmail.com> --- Doc/library/email.errors.rst | 7 +++ Doc/library/email.policy.rst | 18 ++++++ Doc/whatsnew/3.13.rst | 9 +++ Lib/email/_header_value_parser.py | 12 +++- Lib/email/_policybase.py | 8 +++ Lib/email/errors.py | 4 ++ Lib/email/generator.py | 13 +++- Lib/test/test_email/test_generator.py | 62 +++++++++++++++++++ Lib/test/test_email/test_policy.py | 26 ++++++++ ...-07-27-16-10-41.gh-issue-121650.nf6oc9.rst | 5 ++ 10 files changed, 160 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2024-07-27-16-10-41.gh-issue-121650.nf6oc9.rst diff --git a/Doc/library/email.errors.rst b/Doc/library/email.errors.rst index 33ab4265116178..f8f43d82a3df2e 100644 --- a/Doc/library/email.errors.rst +++ b/Doc/library/email.errors.rst @@ -58,6 +58,13 @@ The following exception classes are defined in the :mod:`email.errors` module: :class:`~email.mime.nonmultipart.MIMENonMultipart` (e.g. :class:`~email.mime.image.MIMEImage`). + +.. exception:: HeaderWriteError() + + Raised when an error occurs when the :mod:`~email.generator` outputs + headers. + + .. exception:: MessageDefect() This is the base class for all defects found when parsing email messages. diff --git a/Doc/library/email.policy.rst b/Doc/library/email.policy.rst index 83feedf728351e..314767d0802a08 100644 --- a/Doc/library/email.policy.rst +++ b/Doc/library/email.policy.rst @@ -229,6 +229,24 @@ added matters. To illustrate:: .. versionadded:: 3.6 + + .. attribute:: verify_generated_headers + + If ``True`` (the default), the generator will raise + :exc:`~email.errors.HeaderWriteError` instead of writing a header + that is improperly folded or delimited, such that it would + be parsed as multiple headers or joined with adjacent data. + Such headers can be generated by custom header classes or bugs + in the ``email`` module. + + As it's a security feature, this defaults to ``True`` even in the + :class:`~email.policy.Compat32` policy. + For backwards compatible, but unsafe, behavior, it must be set to + ``False`` explicitly. + + .. versionadded:: 3.13 + + The following :class:`Policy` method is intended to be called by code using the email library to create policy instances with custom settings: diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst index b53f419a59f062..35b808a4dd00a4 100644 --- a/Doc/whatsnew/3.13.rst +++ b/Doc/whatsnew/3.13.rst @@ -724,6 +724,15 @@ doctest email ----- +* Headers with embedded newlines are now quoted on output. + + The :mod:`~email.generator` will now refuse to serialize (write) headers + that are improperly folded or delimited, such that they would be parsed as + multiple headers or joined with adjacent data. + If you need to turn this safety feature off, + set :attr:`~email.policy.Policy.verify_generated_headers`. + (Contributed by Bas Bloemsaat and Petr Viktorin in :gh:`121650`.) + * :func:`email.utils.getaddresses` and :func:`email.utils.parseaddr` now return ``('', '')`` 2-tuples in more situations where invalid email addresses are encountered instead of potentially inaccurate values. Add optional *strict* diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py index 7da1bbaf8a80d7..ec2215a5e5f33c 100644 --- a/Lib/email/_header_value_parser.py +++ b/Lib/email/_header_value_parser.py @@ -92,6 +92,8 @@ ASPECIALS = TSPECIALS | set("*'%") ATTRIBUTE_ENDS = ASPECIALS | WSP EXTENDED_ATTRIBUTE_ENDS = ATTRIBUTE_ENDS - set('%') +NLSET = {'\n', '\r'} +SPECIALSNL = SPECIALS | NLSET def quote_string(value): return '"'+str(value).replace('\\', '\\\\').replace('"', r'\"')+'"' @@ -2802,9 +2804,13 @@ def _refold_parse_tree(parse_tree, *, policy): wrap_as_ew_blocked -= 1 continue tstr = str(part) - if part.token_type == 'ptext' and set(tstr) & SPECIALS: - # Encode if tstr contains special characters. - want_encoding = True + if not want_encoding: + if part.token_type == 'ptext': + # Encode if tstr contains special characters. + want_encoding = not SPECIALSNL.isdisjoint(tstr) + else: + # Encode if tstr contains newlines. + want_encoding = not NLSET.isdisjoint(tstr) try: tstr.encode(encoding) charset = encoding diff --git a/Lib/email/_policybase.py b/Lib/email/_policybase.py index 2ec54fbabae83c..5f9aa9fb091fa2 100644 --- a/Lib/email/_policybase.py +++ b/Lib/email/_policybase.py @@ -157,6 +157,13 @@ class Policy(_PolicyBase, metaclass=abc.ABCMeta): message_factory -- the class to use to create new message objects. If the value is None, the default is Message. + verify_generated_headers + -- if true, the generator verifies that each header + they are properly folded, so that a parser won't + treat it as multiple headers, start-of-body, or + part of another header. + This is a check against custom Header & fold() + implementations. """ raise_on_defect = False @@ -165,6 +172,7 @@ class Policy(_PolicyBase, metaclass=abc.ABCMeta): max_line_length = 78 mangle_from_ = False message_factory = None + verify_generated_headers = True def handle_defect(self, obj, defect): """Based on policy, either raise defect or call register_defect. diff --git a/Lib/email/errors.py b/Lib/email/errors.py index 3ad00565549968..02aa5eced6ae46 100644 --- a/Lib/email/errors.py +++ b/Lib/email/errors.py @@ -29,6 +29,10 @@ class CharsetError(MessageError): """An illegal charset was given.""" +class HeaderWriteError(MessageError): + """Error while writing headers.""" + + # These are parsing defects which the parser was able to work around. class MessageDefect(ValueError): """Base class for a message defect.""" diff --git a/Lib/email/generator.py b/Lib/email/generator.py index c8056ad47baa0f..47b9df8f4e6090 100644 --- a/Lib/email/generator.py +++ b/Lib/email/generator.py @@ -14,12 +14,14 @@ from copy import deepcopy from io import StringIO, BytesIO from email.utils import _has_surrogates +from email.errors import HeaderWriteError UNDERSCORE = '_' NL = '\n' # XXX: no longer used by the code below. NLCRE = re.compile(r'\r\n|\r|\n') fcre = re.compile(r'^From ', re.MULTILINE) +NEWLINE_WITHOUT_FWSP = re.compile(r'\r\n[^ \t]|\r[^ \n\t]|\n[^ \t]') class Generator: @@ -222,7 +224,16 @@ def _dispatch(self, msg): def _write_headers(self, msg): for h, v in msg.raw_items(): - self.write(self.policy.fold(h, v)) + folded = self.policy.fold(h, v) + if self.policy.verify_generated_headers: + linesep = self.policy.linesep + if not folded.endswith(self.policy.linesep): + raise HeaderWriteError( + f'folded header does not end with {linesep!r}: {folded!r}') + if NEWLINE_WITHOUT_FWSP.search(folded.removesuffix(linesep)): + raise HeaderWriteError( + f'folded header contains newline: {folded!r}') + self.write(folded) # A blank line always separates headers from body self.write(self._NL) diff --git a/Lib/test/test_email/test_generator.py b/Lib/test/test_email/test_generator.py index bc6f734d4fd0a9..c75a842c33578e 100644 --- a/Lib/test/test_email/test_generator.py +++ b/Lib/test/test_email/test_generator.py @@ -6,6 +6,7 @@ from email.generator import Generator, BytesGenerator from email.headerregistry import Address from email import policy +import email.errors from test.test_email import TestEmailBase, parameterize @@ -249,6 +250,44 @@ def test_rfc2231_wrapping_switches_to_default_len_if_too_narrow(self): g.flatten(msg) self.assertEqual(s.getvalue(), self.typ(expected)) + def test_keep_encoded_newlines(self): + msg = self.msgmaker(self.typ(textwrap.dedent("""\ + To: nobody + Subject: Bad subject=?UTF-8?Q?=0A?=Bcc: inject...@example.com + + None + """))) + expected = textwrap.dedent("""\ + To: nobody + Subject: Bad subject=?UTF-8?Q?=0A?=Bcc: inject...@example.com + + None + """) + s = self.ioclass() + g = self.genclass(s, policy=self.policy.clone(max_line_length=80)) + g.flatten(msg) + self.assertEqual(s.getvalue(), self.typ(expected)) + + def test_keep_long_encoded_newlines(self): + msg = self.msgmaker(self.typ(textwrap.dedent("""\ + To: nobody + Subject: Bad subject=?UTF-8?Q?=0A?=Bcc: inject...@example.com + + None + """))) + expected = textwrap.dedent("""\ + To: nobody + Subject: Bad subject + =?utf-8?q?=0A?=Bcc: + inject...@example.com + + None + """) + s = self.ioclass() + g = self.genclass(s, policy=self.policy.clone(max_line_length=30)) + g.flatten(msg) + self.assertEqual(s.getvalue(), self.typ(expected)) + class TestGenerator(TestGeneratorBase, TestEmailBase): @@ -273,6 +312,29 @@ def test_flatten_unicode_linesep(self): g.flatten(msg) self.assertEqual(s.getvalue(), self.typ(expected)) + def test_verify_generated_headers(self): + """gh-121650: by default the generator prevents header injection""" + class LiteralHeader(str): + name = 'Header' + def fold(self, **kwargs): + return self + + for text in ( + 'Value\r\nBad Injection\r\n', + 'NoNewLine' + ): + with self.subTest(text=text): + message = message_from_string( + "Header: Value\r\n\r\nBody", + policy=self.policy, + ) + + del message['Header'] + message['Header'] = LiteralHeader(text) + + with self.assertRaises(email.errors.HeaderWriteError): + message.as_string() + class TestBytesGenerator(TestGeneratorBase, TestEmailBase): diff --git a/Lib/test/test_email/test_policy.py b/Lib/test/test_email/test_policy.py index c6b9c80efe1b54..baa35fd68e49c5 100644 --- a/Lib/test/test_email/test_policy.py +++ b/Lib/test/test_email/test_policy.py @@ -26,6 +26,7 @@ class PolicyAPITests(unittest.TestCase): 'raise_on_defect': False, 'mangle_from_': True, 'message_factory': None, + 'verify_generated_headers': True, } # These default values are the ones set on email.policy.default. # If any of these defaults change, the docs must be updated. @@ -294,6 +295,31 @@ def test_short_maxlen_error(self): with self.assertRaises(email.errors.HeaderParseError): policy.fold("Subject", subject) + def test_verify_generated_headers(self): + """Turning protection off allows header injection""" + policy = email.policy.default.clone(verify_generated_headers=False) + for text in ( + 'Header: Value\r\nBad: Injection\r\n', + 'Header: NoNewLine' + ): + with self.subTest(text=text): + message = email.message_from_string( + "Header: Value\r\n\r\nBody", + policy=policy, + ) + class LiteralHeader(str): + name = 'Header' + def fold(self, **kwargs): + return self + + del message['Header'] + message['Header'] = LiteralHeader(text) + + self.assertEqual( + message.as_string(), + f"{text}\nBody", + ) + # XXX: Need subclassing tests. # For adding subclassed objects, make sure the usual rules apply (subclass # wins), but that the order still works (right overrides left). diff --git a/Misc/NEWS.d/next/Library/2024-07-27-16-10-41.gh-issue-121650.nf6oc9.rst b/Misc/NEWS.d/next/Library/2024-07-27-16-10-41.gh-issue-121650.nf6oc9.rst new file mode 100644 index 00000000000000..83dd28d4ac575b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-07-27-16-10-41.gh-issue-121650.nf6oc9.rst @@ -0,0 +1,5 @@ +:mod:`email` headers with embedded newlines are now quoted on output. The +:mod:`~email.generator` will now refuse to serialize (write) headers that +are unsafely folded or delimited; see +:attr:`~email.policy.Policy.verify_generated_headers`. (Contributed by Bas +Bloemsaat and Petr Viktorin in :gh:`121650`.) ++++++ bluez-devel-vendor.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vendor/bluetooth/bluetooth.h new/Vendor/bluetooth/bluetooth.h --- old/Vendor/bluetooth/bluetooth.h 2023-10-02 19:07:44.953002185 +0200 +++ new/Vendor/bluetooth/bluetooth.h 2024-08-07 15:40:00.319405460 +0200 @@ -174,7 +174,7 @@ struct bt_iso_bcast_qos { uint8_t big; uint8_t bis; - uint8_t sync_interval; + uint8_t sync_factor; uint8_t packing; uint8_t framing; struct bt_iso_io_qos in; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Vendor/bluetooth/sdp_lib.h new/Vendor/bluetooth/sdp_lib.h --- old/Vendor/bluetooth/sdp_lib.h 2023-10-02 19:07:44.956335545 +0200 +++ new/Vendor/bluetooth/sdp_lib.h 2024-08-07 15:40:00.322738820 +0200 @@ -141,7 +141,8 @@ /* flexible extraction of basic attributes - Jean II */ int sdp_get_int_attr(const sdp_record_t *rec, uint16_t attr, int *value); -int sdp_get_string_attr(const sdp_record_t *rec, uint16_t attr, char *value, int valuelen); +int sdp_get_string_attr(const sdp_record_t *rec, uint16_t attr, char *value, + size_t valuelen); /* * Basic sdp data functions @@ -543,32 +544,38 @@ int sdp_get_service_ttl(const sdp_record_t *rec, uint32_t *svcTTLInfo); int sdp_get_database_state(const sdp_record_t *rec, uint32_t *svcDBState); -static inline int sdp_get_service_name(const sdp_record_t *rec, char *str, int len) +static inline int sdp_get_service_name(const sdp_record_t *rec, char *str, + size_t len) { return sdp_get_string_attr(rec, SDP_ATTR_SVCNAME_PRIMARY, str, len); } -static inline int sdp_get_service_desc(const sdp_record_t *rec, char *str, int len) +static inline int sdp_get_service_desc(const sdp_record_t *rec, char *str, + size_t len) { return sdp_get_string_attr(rec, SDP_ATTR_SVCDESC_PRIMARY, str, len); } -static inline int sdp_get_provider_name(const sdp_record_t *rec, char *str, int len) +static inline int sdp_get_provider_name(const sdp_record_t *rec, char *str, + size_t len) { return sdp_get_string_attr(rec, SDP_ATTR_PROVNAME_PRIMARY, str, len); } -static inline int sdp_get_doc_url(const sdp_record_t *rec, char *str, int len) +static inline int sdp_get_doc_url(const sdp_record_t *rec, char *str, + size_t len) { return sdp_get_string_attr(rec, SDP_ATTR_DOC_URL, str, len); } -static inline int sdp_get_clnt_exec_url(const sdp_record_t *rec, char *str, int len) +static inline int sdp_get_clnt_exec_url(const sdp_record_t *rec, char *str, + size_t len) { return sdp_get_string_attr(rec, SDP_ATTR_CLNT_EXEC_URL, str, len); } -static inline int sdp_get_icon_url(const sdp_record_t *rec, char *str, int len) +static inline int sdp_get_icon_url(const sdp_record_t *rec, char *str, + size_t len) { return sdp_get_string_attr(rec, SDP_ATTR_ICON_URL, str, len); } ++++++ bpo-31046_ensurepip_honours_prefix.patch ++++++ --- /var/tmp/diff_new_pack.RqF8KQ/_old 2024-08-08 10:59:08.841467519 +0200 +++ /var/tmp/diff_new_pack.RqF8KQ/_new 2024-08-08 10:59:08.849467848 +0200 @@ -139,7 +139,7 @@ --- a/Makefile.pre.in +++ b/Makefile.pre.in -@@ -2144,7 +2144,7 @@ install: @FRAMEWORKINSTALLFIRST@ @INSTAL +@@ -2157,7 +2157,7 @@ install: @FRAMEWORKINSTALLFIRST@ @INSTAL install|*) ensurepip="" ;; \ esac; \ $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \ @@ -148,7 +148,7 @@ fi .PHONY: altinstall -@@ -2155,7 +2155,7 @@ altinstall: commoninstall +@@ -2168,7 +2168,7 @@ altinstall: commoninstall install|*) ensurepip="--altinstall" ;; \ esac; \ $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \ ++++++ bso1227999-reproducible-builds.patch ++++++ >From ac2b8869724d7a57d9b5efbdce2f20423214e8bb Mon Sep 17 00:00:00 2001 From: "Bernhard M. Wiedemann" <bwiedem...@suse.de> Date: Tue, 16 Jul 2024 21:39:33 +0200 Subject: [PATCH] Allow to override build date with SOURCE_DATE_EPOCH to make builds reproducible. See https://reproducible-builds.org/ for why this is good and https://reproducible-builds.org/specs/source-date-epoch/ for the definition of this variable. --- Doc/library/functions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -1502,7 +1502,7 @@ are always available. They are listed h (where :func:`open` is declared), :mod:`os`, :mod:`os.path`, :mod:`tempfile`, and :mod:`shutil`. - .. audit-event:: open file,mode,flags open + .. audit-event:: open path,mode,flags open The ``mode`` and ``flags`` arguments may have been modified or inferred from the original call. ++++++ fix_configure_rst.patch ++++++ --- /var/tmp/diff_new_pack.RqF8KQ/_old 2024-08-08 10:59:08.889469492 +0200 +++ /var/tmp/diff_new_pack.RqF8KQ/_new 2024-08-08 10:59:08.893469657 +0200 @@ -4,7 +4,7 @@ --- a/Misc/NEWS +++ b/Misc/NEWS -@@ -17527,7 +17527,7 @@ C API +@@ -17647,7 +17647,7 @@ C API - bpo-40939: Removed documentation for the removed ``PyParser_*`` C API. - bpo-43795: The list in :ref:`limited-api-list` now shows the public name ++++++ python-3.3.0b1-fix_date_time_compiler.patch ++++++ --- /var/tmp/diff_new_pack.RqF8KQ/_old 2024-08-08 10:59:08.969472781 +0200 +++ /var/tmp/diff_new_pack.RqF8KQ/_new 2024-08-08 10:59:08.969472781 +0200 @@ -4,7 +4,7 @@ --- a/Makefile.pre.in +++ b/Makefile.pre.in -@@ -1666,11 +1666,18 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \ +@@ -1679,11 +1679,18 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \ $(DTRACE_OBJS) \ $(srcdir)/Modules/getbuildinfo.c $(CC) -c $(PY_CORE_CFLAGS) \ ++++++ skip_test_abort_clients.patch ++++++ --- Lib/test/test_asyncio/test_server.py | 1 + 1 file changed, 1 insertion(+) Index: Python-3.13.0rc1/Lib/test/test_asyncio/test_server.py =================================================================== --- Python-3.13.0rc1.orig/Lib/test/test_asyncio/test_server.py +++ Python-3.13.0rc1/Lib/test/test_asyncio/test_server.py @@ -212,6 +212,7 @@ class TestServer2(unittest.IsolatedAsync await asyncio.sleep(0) self.assertTrue(task.done()) + @unittest.skip('Failing test gh#python/cpython#122136') async def test_abort_clients(self): async def serve(rd, wr): fut.set_result((rd, wr))