<feed xmlns='http://www.w3.org/2005/Atom'>
<title>django.git/tests/queries/tests.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>2026-04-27T19:49:14Z</updated>
<entry>
<title>Moved QuerySet.extra() assertions to a separate test.</title>
<updated>2026-04-27T19:49:14Z</updated>
<author>
<name>Tim Graham</name>
<email>timograham@gmail.com</email>
</author>
<published>2026-04-25T11:07:01Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=a49be25e6128a3272960ed4f6f6506d147596395'/>
<id>urn:sha1:a49be25e6128a3272960ed4f6f6506d147596395</id>
<content type='text'>
This allows backends that don't support extra() to skip it.
</content>
</entry>
<entry>
<title>Fixed #20024 -- Fixed handling of __in lookups with None in exclude().</title>
<updated>2026-04-02T15:24:26Z</updated>
<author>
<name>Eddy Adegnandjou</name>
<email>adegnandjoueddy12@gmail.com</email>
</author>
<published>2025-10-31T08:00:41Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=cec10f992be8eed5ed90506375ae5794cbb7069e'/>
<id>urn:sha1:cec10f992be8eed5ed90506375ae5794cbb7069e</id>
<content type='text'>
Thanks Simon Charette and Tim Graham for reviews, and Jason Hall for a
prior iteration.
</content>
</entry>
<entry>
<title>Refs #36883 -- Split monolithic aggregation/lookup/queries tests.</title>
<updated>2026-03-21T14:14:48Z</updated>
<author>
<name>Tim Graham</name>
<email>timograham@gmail.com</email>
</author>
<published>2026-02-10T01:57:37Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=f2169ef3688422d394d36007e320bac839117f0b'/>
<id>urn:sha1:f2169ef3688422d394d36007e320bac839117f0b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fixed #36795 -- Enforced quoting of all database object names.</title>
<updated>2026-03-19T16:24:17Z</updated>
<author>
<name>Simon Charette</name>
<email>charette.s@gmail.com</email>
</author>
<published>2026-02-01T21:53:54Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=f05fac88c4699c6d04a8f1ac3328cf6c7bd39228'/>
<id>urn:sha1:f05fac88c4699c6d04a8f1ac3328cf6c7bd39228</id>
<content type='text'>
This ensures all database identifiers are quoted independently of their orign
and most importantly that user provided aliases through annotate() and alias()
which paves the way for dropping the allow list of characters such aliases can
contain.

This will require adjustments to raw SQL interfaces such as RawSQL that might
make reference to ORM managed annotations as these will now be quoted.

The `SQLCompiler.quote_name_unless_alias` method is kept for now as an alias
for the newly introduced `.quote_name` method but will be duly deprecated in
a follow up commit.
</content>
</entry>
<entry>
<title>Refs #28455 -- Implemented private API methods for preventing QuerySet cloning.</title>
<updated>2026-03-11T17:05:44Z</updated>
<author>
<name>Keryn Knight</name>
<email>keryn@kerynknight.com</email>
</author>
<published>2021-07-20T12:04:51Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=8d8a8713432a88737c4400610eef11c5c8457b86'/>
<id>urn:sha1:8d8a8713432a88737c4400610eef11c5c8457b86</id>
<content type='text'>
Multiple calls are idempotent assuming they're balanced. Also, multiple
calls to disable cloning followed by a single call to re-enable cloning
will subsequently cause clones to occur - it is not a stack, just a
toggle.

@contextlib.contextmanager is intentionally not used for performance
reasons:
- decorator takes 1.1µs to execute, or 2µs if used correctly in a
  `with ...:` statement
- custom class takes 300ns to execute, or 900ns if used correctly in a
  `with ...:` statement

Based on work originally done by Anssi Kääriäinen and Tim Graham.
</content>
</entry>
<entry>
<title>Fixed CVE-2026-1287 -- Protected against SQL injection in column aliases via control characters.</title>
<updated>2026-02-03T12:55:04Z</updated>
<author>
<name>Jake Howard</name>
<email>git@theorangeone.net</email>
</author>
<published>2026-01-21T11:14:48Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=e891a84c7ef9962bfcc3b4685690219542f86a22'/>
<id>urn:sha1:e891a84c7ef9962bfcc3b4685690219542f86a22</id>
<content type='text'>
Control characters in FilteredRelation column aliases could be used for
SQL injection attacks. This affected QuerySet.annotate(), aggregate(),
extra(), values(), values_list(), and alias() when using dictionary
expansion with **kwargs.

Thanks Solomon Kebede for the report, and Simon Charette, Jacob Walls,
and Natalia Bidart for reviews.
</content>
</entry>
<entry>
<title>Refs CVE-2025-64459 -- Avoided propagating invalid arguments to Q on dictionary expansion.</title>
<updated>2025-11-05T12:20:57Z</updated>
<author>
<name>Jacob Walls</name>
<email>jacobtylerwalls@gmail.com</email>
</author>
<published>2025-09-24T19:56:03Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=3c3f46357718166069948625354b8315a8505262'/>
<id>urn:sha1:3c3f46357718166069948625354b8315a8505262</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fixed CVE-2025-59681 -- Protected QuerySet.annotate(), alias(), aggregate(), and extra() against SQL injection in column aliases on MySQL/MariaDB.</title>
<updated>2025-10-01T12:11:45Z</updated>
<author>
<name>Mariusz Felisiak</name>
<email>felisiak.mariusz@gmail.com</email>
</author>
<published>2025-09-10T07:53:52Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=41b43c74bda19753c757036673ea9db74acf494a'/>
<id>urn:sha1:41b43c74bda19753c757036673ea9db74acf494a</id>
<content type='text'>
Thanks sw0rd1ight for the report.

Follow up to 93cae5cb2f9a4ef1514cf1a41f714fef08005200.
</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 #36288 -- Addressed improper handling of duplicates in values_list().</title>
<updated>2025-04-11T07:04:49Z</updated>
<author>
<name>Simon Charette</name>
<email>charette.s@gmail.com</email>
</author>
<published>2025-04-02T22:53:36Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=21f8be76d43aa1ee5ae41c1e0a428cfea1f231c1'/>
<id>urn:sha1:21f8be76d43aa1ee5ae41c1e0a428cfea1f231c1</id>
<content type='text'>
Now that selected aliases are stored in sql.Query.selected: dict[str, Any]
the values_list() method must ensures that duplicate field name references are
assigned unique aliases.

Refs #28900.

Regression in 65ad4ade74dc9208b9d686a451cd6045df0c9c3a.

Thanks Claude for the report.
</content>
</entry>
</feed>
