<feed xmlns='http://www.w3.org/2005/Atom'>
<title>django.git/django/core/servers/basehttp.py, branch main</title>
<subtitle>django
</subtitle>
<id>http://cgit.adnoto.dev/django.git/atom?h=main</id>
<link rel='self' href='http://cgit.adnoto.dev/django.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/'/>
<updated>2025-10-20T19:21:32Z</updated>
<entry>
<title>Fixed #36470 -- Prevented log injection in runserver when handling NOT FOUND.</title>
<updated>2025-10-20T19:21:32Z</updated>
<author>
<name>YashRaj1506</name>
<email>yashraj504300@gmail.com</email>
</author>
<published>2025-06-25T22:01:00Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=9bb83925d6c231e964f8b54efbc982fb1333da27'/>
<id>urn:sha1:9bb83925d6c231e964f8b54efbc982fb1333da27</id>
<content type='text'>
Migrated `WSGIRequestHandler.log_message()` to use a more robust
`log_message()` helper, which was based of `log_response()` via factoring out
the common bits.

Refs CVE-2025-48432.

Co-authored-by: Natalia &lt;124304+nessita@users.noreply.github.com&gt;
</content>
</entry>
<entry>
<title>Refs #36500 -- Rewrapped long docstrings and block comments via a script.</title>
<updated>2025-07-23T23:17:55Z</updated>
<author>
<name>django-bot</name>
<email>ops@djangoproject.com</email>
</author>
<published>2025-07-23T03:41:41Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=69a93a88edb56ba47f624dac7a21aacc47ea474f'/>
<id>urn:sha1:69a93a88edb56ba47f624dac7a21aacc47ea474f</id>
<content type='text'>
Rewrapped long docstrings and block comments to 79 characters + newline
using script from https://github.com/medmunds/autofix-w505.
</content>
</entry>
<entry>
<title>Fixed #35051 -- Prevented runserver from removing non-zero Content-Length for HEAD requests.</title>
<updated>2023-12-31T07:32:37Z</updated>
<author>
<name>Paul Bailey</name>
<email>paul@neutron.studio</email>
</author>
<published>2023-12-31T07:32:37Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=9d52e0720f79ac3cff3d9888a97ac227884a621e'/>
<id>urn:sha1:9d52e0720f79ac3cff3d9888a97ac227884a621e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fixed #32813 -- Made runserver display port after binding.</title>
<updated>2023-02-10T07:22:34Z</updated>
<author>
<name>Dhanush</name>
<email>dhanush18245@gmail.com</email>
</author>
<published>2023-02-03T20:13:36Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=a18d20ca97e6799152c1e0b6f007fde943053dcb'/>
<id>urn:sha1:a18d20ca97e6799152c1e0b6f007fde943053dcb</id>
<content type='text'>
Thanks Florian Apolloner for the review.
</content>
</entry>
<entry>
<title>Fixed #28054 -- Made runserver not return response body for HEAD requests.</title>
<updated>2023-01-27T20:49:54Z</updated>
<author>
<name>Sarah Boyce</name>
<email>42296566+sarahboyce@users.noreply.github.com</email>
</author>
<published>2023-01-27T20:49:54Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=8acc433e415cd771f69dfe84e57878a83641e78b'/>
<id>urn:sha1:8acc433e415cd771f69dfe84e57878a83641e78b</id>
<content type='text'>
Co-authored-by: jannschu &lt;jannik.schuerg@posteo.de&gt;</content>
</entry>
<entry>
<title>Fixed #33865 -- Optimized LimitedStream wrapper.</title>
<updated>2023-01-05T18:26:56Z</updated>
<author>
<name>Nick Pope</name>
<email>nick@nickpope.me.uk</email>
</author>
<published>2022-07-22T20:08:10Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=b47f2f5b907732d80b164f1f361ae39da94a3fa6'/>
<id>urn:sha1:b47f2f5b907732d80b164f1f361ae39da94a3fa6</id>
<content type='text'>
The current implementation of LimitedStream is slow because .read()
performs an extra copy into a buffer and .readline() performs two
extra copies. The stream being wrapped is already typically a BytesIO
object so this is unnecessary.

This implementation has largely been untouched for 12 years and,
inspired by a simpler implementation in werkzeug, it was possible to
achieve the following performance improvement:

LimitedStream.read() (single line):
  Mean +- std dev: [bench_limitedstream-main] 286 ns +- 6 ns
  -&gt; [bench_limitedstream-patch] 227 ns +- 6 ns: 1.26x faster
LimitedStream.readline() (single line):
  Mean +- std dev: [bench_limitedstream-main] 507 ns +- 11 ns
  -&gt; [bench_limitedstream-patch] 232 ns +- 8 ns: 2.18x faster
LimitedStream.read(8192) (single line):
  Mean +- std dev: [bench_limitedstream-main] 360 ns +- 8 ns
  -&gt; [bench_limitedstream-patch] 297 ns +- 6 ns: 1.21x faster
LimitedStream.readline(8192) (single line):
  Mean +- std dev: [bench_limitedstream-main] 602 ns +- 10 ns
  -&gt; [bench_limitedstream-patch] 305 ns +- 10 ns: 1.98x faster
LimitedStream.read() (multiple lines):
  Mean +- std dev: [bench_limitedstream-main] 290 ns +- 5 ns
  -&gt; [bench_limitedstream-patch] 236 ns +- 6 ns: 1.23x faster
LimitedStream.readline() (multiple lines):
  Mean +- std dev: [bench_limitedstream-main] 517 ns +- 19 ns
  -&gt; [bench_limitedstream-patch] 239 ns +- 7 ns: 2.16x faster
LimitedStream.read(8192) (multiple lines):
  Mean +- std dev: [bench_limitedstream-main] 363 ns +- 8 ns
  -&gt; [bench_limitedstream-patch] 311 ns +- 11 ns: 1.17x faster
LimitedStream.readline(8192) (multiple lines):
  Mean +- std dev: [bench_limitedstream-main] 601 ns +- 12 ns
  -&gt; [bench_limitedstream-patch] 308 ns +- 7 ns: 1.95x faster

Geometric mean: 1.59x faster
</content>
</entry>
<entry>
<title>Refs #25684 -- Removed double newline from request/response output of runserver.</title>
<updated>2022-02-14T05:55:34Z</updated>
<author>
<name>rafrafek</name>
<email>23004737+rafrafek@users.noreply.github.com</email>
</author>
<published>2022-02-12T12:57:25Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=cdd4ff67d23b80741047eaf6b180dc67a782dfbd'/>
<id>urn:sha1:cdd4ff67d23b80741047eaf6b180dc67a782dfbd</id>
<content type='text'>
Follow up to 0bc5cd628042bf0a44df60a93085a4f991a84dfb.
</content>
</entry>
<entry>
<title>Refs #33476 -- Reformatted code with Black.</title>
<updated>2022-02-07T19:37:05Z</updated>
<author>
<name>django-bot</name>
<email>ops@djangoproject.com</email>
</author>
<published>2022-02-03T19:24:19Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=9c19aff7c7561e3a82978a272ecdaad40dda5c00'/>
<id>urn:sha1:9c19aff7c7561e3a82978a272ecdaad40dda5c00</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fixed #32416 -- Made ThreadedWSGIServer close connections after each thread.</title>
<updated>2021-04-12T08:23:56Z</updated>
<author>
<name>Chris Jerdonek</name>
<email>chris.jerdonek@gmail.com</email>
</author>
<published>2021-02-15T06:10:59Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=823a9e6bac38d38f7b0347497b833eec732bd384'/>
<id>urn:sha1:823a9e6bac38d38f7b0347497b833eec732bd384</id>
<content type='text'>
ThreadedWSGIServer is used by LiveServerTestCase.
</content>
</entry>
<entry>
<title>Fixed #32265, Refs #32355 -- Removed unnecessary ServerHandler.handle_error().</title>
<updated>2021-01-16T16:37:53Z</updated>
<author>
<name>Mariusz Felisiak</name>
<email>felisiak.mariusz@gmail.com</email>
</author>
<published>2021-01-16T16:37:53Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=88e972e46d71520fbb480642cf957185e5a14a46'/>
<id>urn:sha1:88e972e46d71520fbb480642cf957185e5a14a46</id>
<content type='text'>
ConnectionAbortedError, BrokenPipeError, ConnectionResetError raised
from SocketServer.BaseServer.finish_request() are already suppressed
by wsgiref.handlers.BaseHandler.run() in Python 3.7+, see
https://github.com/python/cpython/commit/47ffc1a9f6fab1c17cdcc325d4af066317369ed7</content>
</entry>
</feed>
