forked from pool/python312
- Tests
- gh-127906: Test the limited C API in test_cppext. Patch by
Victor Stinner.
- gh-127906: Backport test_cext from the main branch. Patch
by Victor Stinner.
- gh-127637: Add tests for the dis command-line
interface. Patch by Bénédikt Tran.
- 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
policy. Previously when a quoted string was folded so
that it spanned more than one line, the surrounding
quotes and internal escapes would be omitted. This could
theoretically be used to spoof header lines using a
carefully constructed quoted string if the resulting
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python312?expand=0&rev=94
47 lines
2.0 KiB
Diff
47 lines
2.0 KiB
Diff
From bfc2e93d755bf496e5ef4cae9609d2823122c909 Mon Sep 17 00:00:00 2001
|
|
From: "J. Nick Koston" <nick@koston.org>
|
|
Date: Thu, 5 Dec 2024 10:01:10 -0600
|
|
Subject: [PATCH 01/10] Ensure writelines pauses the protocol if needed
|
|
|
|
---
|
|
Lib/asyncio/selector_events.py | 1
|
|
Lib/test/test_asyncio/test_selector_events.py | 12 ++++++++++
|
|
Misc/NEWS.d/next/Security/2024-12-05-21-35-19.gh-issue-127655.xpPoOf.rst | 1
|
|
3 files changed, 14 insertions(+)
|
|
|
|
--- a/Lib/asyncio/selector_events.py
|
|
+++ b/Lib/asyncio/selector_events.py
|
|
@@ -1183,6 +1183,7 @@ class _SelectorSocketTransport(_Selector
|
|
# If the entire buffer couldn't be written, register a write handler
|
|
if self._buffer:
|
|
self._loop._add_writer(self._sock_fd, self._write_ready)
|
|
+ self._maybe_pause_protocol()
|
|
|
|
def can_write_eof(self):
|
|
return True
|
|
--- a/Lib/test/test_asyncio/test_selector_events.py
|
|
+++ b/Lib/test/test_asyncio/test_selector_events.py
|
|
@@ -805,6 +805,18 @@ class SelectorSocketTransportTests(test_
|
|
self.assertTrue(self.sock.send.called)
|
|
self.assertTrue(self.loop.writers)
|
|
|
|
+ def test_writelines_pauses_protocol(self):
|
|
+ data = memoryview(b'data')
|
|
+ self.sock.send.return_value = 2
|
|
+ self.sock.send.fileno.return_value = 7
|
|
+
|
|
+ transport = self.socket_transport()
|
|
+ transport._high_water = 1
|
|
+ transport.writelines([data])
|
|
+ self.assertTrue(self.protocol.pause_writing.called)
|
|
+ self.assertTrue(self.sock.send.called)
|
|
+ self.assertTrue(self.loop.writers)
|
|
+
|
|
@unittest.skipUnless(selector_events._HAS_SENDMSG, 'no sendmsg')
|
|
def test_write_sendmsg_full(self):
|
|
data = memoryview(b'data')
|
|
--- /dev/null
|
|
+++ b/Misc/NEWS.d/next/Security/2024-12-05-21-35-19.gh-issue-127655.xpPoOf.rst
|
|
@@ -0,0 +1 @@
|
|
+Fixed the :class:`!asyncio.selector_events._SelectorSocketTransport` transport not pausing writes for the protocol when the buffer reaches the high water mark when using :meth:`asyncio.WriteTransport.writelines`.
|