Skip to content

Commit 9f7c7ab

Browse files
Release v3.13.4 (#12291)
1 parent 625f29e commit 9f7c7ab

23 files changed

Lines changed: 218 additions & 53 deletions

CHANGES.rst

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,223 @@
1010

1111
.. towncrier release notes start
1212
13+
3.13.4 (2026-03-28)
14+
===================
15+
16+
Features
17+
--------
18+
19+
- Added ``max_headers`` parameter to limit the number of headers that should be read from a response -- by :user:`Dreamsorcerer`.
20+
21+
22+
*Related issues and pull requests on GitHub:*
23+
:issue:`11955`.
24+
25+
26+
27+
- Added a ``dns_cache_max_size`` parameter to ``TCPConnector`` to limit the size of the cache -- by :user:`Dreamsorcerer`.
28+
29+
30+
*Related issues and pull requests on GitHub:*
31+
:issue:`12106`.
32+
33+
34+
35+
Bug fixes
36+
---------
37+
38+
- Fixed server hanging indefinitely when chunked transfer encoding chunk-size
39+
does not match actual data length. The server now raises
40+
``TransferEncodingError`` instead of waiting forever for data that will
41+
never arrive -- by :user:`Fridayai700`.
42+
43+
44+
*Related issues and pull requests on GitHub:*
45+
:issue:`10596`.
46+
47+
48+
49+
- Fixed access log timestamps ignoring daylight saving time (DST) changes. The
50+
previous implementation used :py:data:`time.timezone` which is a constant and
51+
does not reflect DST transitions -- by :user:`nightcityblade`.
52+
53+
54+
*Related issues and pull requests on GitHub:*
55+
:issue:`11283`.
56+
57+
58+
59+
- Fixed ``RuntimeError: An event loop is running`` error when using ``aiohttp.GunicornWebWorker``
60+
or ``aiohttp.GunicornUVLoopWebWorker`` on Python >=3.14.
61+
-- by :user:`Tasssadar`.
62+
63+
64+
*Related issues and pull requests on GitHub:*
65+
:issue:`11701`.
66+
67+
68+
69+
- Fixed :exc:`ValueError` when creating a TLS connection with ``ClientTimeout(total=0)`` by converting ``0`` to ``None`` before passing to ``ssl_handshake_timeout`` in :py:meth:`asyncio.loop.start_tls` -- by :user:`veeceey`.
70+
71+
72+
*Related issues and pull requests on GitHub:*
73+
:issue:`11859`.
74+
75+
76+
77+
- Restored :py:meth:`~aiohttp.BodyPartReader.decode` as a synchronous method
78+
for backward compatibility. The method was inadvertently changed to async
79+
in 3.13.3 as part of the decompression bomb security fix. A new
80+
:py:meth:`~aiohttp.BodyPartReader.decode_iter` method is now available
81+
for non-blocking decompression of large payloads using an async generator.
82+
Internal aiohttp code uses the async variant to maintain security protections.
83+
84+
Changed multipart processing chunk sizes from 64 KiB to 256KiB, to better
85+
match aiohttp internals
86+
-- by :user:`bdraco` and :user:`Dreamsorcerer`.
87+
88+
89+
*Related issues and pull requests on GitHub:*
90+
:issue:`11898`.
91+
92+
93+
94+
- Fixed false-positive :py:class:`DeprecationWarning` for passing ``enable_cleanup_closed=True`` to :py:class:`~aiohttp.TCPConnector` specifically on Python 3.12.7.
95+
-- by :user:`Robsdedude`.
96+
97+
98+
*Related issues and pull requests on GitHub:*
99+
:issue:`11972`.
100+
101+
102+
103+
- Fixed _sendfile_fallback over-reading beyond requested count -- by :user:`bysiber`.
104+
105+
106+
*Related issues and pull requests on GitHub:*
107+
:issue:`12096`.
108+
109+
110+
111+
- Fixed digest auth dropping challenge fields with empty string values -- by :user:`bysiber`.
112+
113+
114+
*Related issues and pull requests on GitHub:*
115+
:issue:`12097`.
116+
117+
118+
119+
- ``ClientConnectorCertificateError.os_error`` no longer raises :exc:`AttributeError`
120+
-- by :user:`themylogin`.
121+
122+
123+
*Related issues and pull requests on GitHub:*
124+
:issue:`12136`.
125+
126+
127+
128+
- Adjusted pure-Python request header value validation to align with RFC 9110 control-character handling, while preserving lax response parser behavior, and added regression tests for Host/header control-character cases.
129+
-- by :user:`rodrigobnogueira`.
130+
131+
132+
*Related issues and pull requests on GitHub:*
133+
:issue:`12231`.
134+
135+
136+
137+
- Rejected duplicate singleton headers (``Host``, ``Content-Type``,
138+
``Content-Length``, etc.) in the C extension HTTP parser to match
139+
the pure Python parser behaviour, preventing potential host-based
140+
access control bypasses via parser differentials
141+
-- by :user:`rodrigobnogueira`.
142+
143+
144+
*Related issues and pull requests on GitHub:*
145+
:issue:`12240`.
146+
147+
148+
149+
- Aligned the pure-Python HTTP request parser with the C parser by splitting
150+
comma-separated and repeated ``Connection`` header values for keep-alive,
151+
close, and upgrade handling -- by :user:`rodrigobnogueira`.
152+
153+
154+
*Related issues and pull requests on GitHub:*
155+
:issue:`12249`.
156+
157+
158+
159+
160+
Improved documentation
161+
----------------------
162+
163+
- Documented :exc:`asyncio.TimeoutError` for ``WebSocketResponse.receive()``
164+
and related methods -- by :user:`veeceey`.
165+
166+
167+
*Related issues and pull requests on GitHub:*
168+
:issue:`12042`.
169+
170+
171+
172+
173+
Packaging updates and notes for downstreams
174+
-------------------------------------------
175+
176+
- Upgraded llhttp to 3.9.1 -- by :user:`Dreamsorcerer`.
177+
178+
179+
*Related issues and pull requests on GitHub:*
180+
:issue:`12069`.
181+
182+
183+
184+
185+
Contributor-facing changes
186+
--------------------------
187+
188+
- The benchmark CI job now runs only in the upstream repository -- by :user:`Cycloctane`.
189+
190+
It used to always fail in forks, which this change fixed.
191+
192+
193+
*Related issues and pull requests on GitHub:*
194+
:issue:`11737`.
195+
196+
197+
198+
- Fixed flaky performance tests by using appropriate fixed thresholds that account for CI variability -- by :user:`rodrigobnogueira`.
199+
200+
201+
*Related issues and pull requests on GitHub:*
202+
:issue:`11992`.
203+
204+
205+
206+
207+
Miscellaneous internal changes
208+
------------------------------
209+
210+
- Fixed ``test_invalid_idna`` to work with ``idna`` 3.11 by using an invalid character (``\u0080``) that is rejected by ``yarl`` during URL construction -- by :user:`rodrigobnogueira`.
211+
212+
213+
*Related issues and pull requests on GitHub:*
214+
:issue:`12027`.
215+
216+
217+
218+
- Fixed race condition in ``test_data_file`` on Python 3.14 free-threaded builds -- by :user:`rodrigobnogueira`.
219+
220+
221+
*Related issues and pull requests on GitHub:*
222+
:issue:`12170`.
223+
224+
225+
226+
227+
----
228+
229+
13230
3.13.3 (2026-01-03)
14231
===================
15232

CHANGES/10596.bugfix.rst

Lines changed: 0 additions & 4 deletions
This file was deleted.

CHANGES/10795.doc.rst

Lines changed: 0 additions & 4 deletions
This file was deleted.

CHANGES/11283.bugfix.rst

Lines changed: 0 additions & 3 deletions
This file was deleted.

CHANGES/11701.bugfix.rst

Lines changed: 0 additions & 3 deletions
This file was deleted.

CHANGES/11737.contrib.rst

Lines changed: 0 additions & 3 deletions
This file was deleted.

CHANGES/11859.bugfix.rst

Lines changed: 0 additions & 1 deletion
This file was deleted.

CHANGES/11898.bugfix.rst

Lines changed: 0 additions & 10 deletions
This file was deleted.

CHANGES/11955.feature.rst

Lines changed: 0 additions & 1 deletion
This file was deleted.

CHANGES/11972.bugfix.rst

Lines changed: 0 additions & 2 deletions
This file was deleted.

0 commit comments

Comments
 (0)