<feed xmlns='http://www.w3.org/2005/Atom'>
<title>django.git/django/db/models/sql, branch stable/6.0.x</title>
<subtitle>django
</subtitle>
<id>http://cgit.adnoto.dev/django.git/atom?h=stable%2F6.0.x</id>
<link rel='self' href='http://cgit.adnoto.dev/django.git/atom?h=stable%2F6.0.x'/>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/'/>
<updated>2026-02-03T13:05:34Z</updated>
<entry>
<title>[6.0.x] Refs CVE-2026-1312 -- Raised ValueError when FilteredRelation aliases contain periods.</title>
<updated>2026-02-03T13:05:34Z</updated>
<author>
<name>Jacob Walls</name>
<email>jacobtylerwalls@gmail.com</email>
</author>
<published>2026-01-21T23:00:13Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=259dff061a9ea85f061ff71c0adb0e07ead693d3'/>
<id>urn:sha1:259dff061a9ea85f061ff71c0adb0e07ead693d3</id>
<content type='text'>
This prevents failures at the database layer, given that aliases in the
ON clause are not quoted.

Systematically quoting aliases even in FilteredRelation is tracked in
https://code.djangoproject.com/ticket/36795.

Backport of 005d60d97c4dfb117503bdb6f2facfcaf9315d84 from main.
</content>
</entry>
<entry>
<title>[6.0.x] Fixed CVE-2026-1312 -- Protected order_by() from SQL injection via aliases with periods.</title>
<updated>2026-02-03T13:04:49Z</updated>
<author>
<name>Jacob Walls</name>
<email>jacobtylerwalls@gmail.com</email>
</author>
<published>2026-01-21T22:53:52Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=15e70cb83e6f7a9a2a2f651f30b28b5cb20febeb'/>
<id>urn:sha1:15e70cb83e6f7a9a2a2f651f30b28b5cb20febeb</id>
<content type='text'>
Before, `order_by()` treated a period in a field name as a sign that it
was requested via `.extra(order_by=...)` and thus should be passed
through as raw table and column names, even if `extra()` was not used.
Since periods are permitted in aliases, this meant user-controlled
aliases could force the `order_by()` clause to resolve to a raw table
and column pair instead of the actual target field for the alias.

In practice, only `FilteredRelation` was affected, as the other
expressions we tested, e.g. `F`, aggressively optimize away the ordering
expressions into ordinal positions, e.g. ORDER BY 2, instead of ORDER BY
"table".column.

Thanks Solomon Kebede for the report, and Simon Charette and Jake Howard
for reviews.

Backport of 69065ca869b0970dff8fdd8fafb390bf8b3bf222 from main.
</content>
</entry>
<entry>
<title>[6.0.x] Fixed CVE-2026-1287 -- Protected against SQL injection in column aliases via control characters.</title>
<updated>2026-02-03T13:03:39Z</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=0c0f5c2178c01ada5410cd53b4b207bf7858b952'/>
<id>urn:sha1:0c0f5c2178c01ada5410cd53b4b207bf7858b952</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.

Backport of e891a84c7ef9962bfcc3b4685690219542f86a22 from main.
</content>
</entry>
<entry>
<title>[6.0.x] 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:17:15Z</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=4ceaaee7e04b416fc465e838a6ef43ca0ccffafe'/>
<id>urn:sha1:4ceaaee7e04b416fc465e838a6ef43ca0ccffafe</id>
<content type='text'>
Thanks sw0rd1ight for the report.

Follow up to 93cae5cb2f9a4ef1514cf1a41f714fef08005200.

Backport of 41b43c74bda19753c757036673ea9db74acf494a from main.
</content>
</entry>
<entry>
<title>[6.0.x] Fixed #35453 -- Made ManyToManyField.concrete False.</title>
<updated>2025-09-23T01:52:21Z</updated>
<author>
<name>Ryan P Kilby</name>
<email>kilbyr@gmail.com</email>
</author>
<published>2025-06-27T20:03:16Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=9575f813afe8f6d40b016cf302d6871f5d38517e'/>
<id>urn:sha1:9575f813afe8f6d40b016cf302d6871f5d38517e</id>
<content type='text'>
ManyToManyField was already excluded from fields, concrete_fields,
and local_concrete_fields in Options.

Backport of f9a44cc0fac653f8e0c2ab1cdfb12b2cc5c63fc2 from main
</content>
</entry>
<entry>
<title>Refs #27222 -- Refreshed GeneratedFields values on save() initiated update.</title>
<updated>2025-09-13T22:27:49Z</updated>
<author>
<name>Simon Charette</name>
<email>charette.s@gmail.com</email>
</author>
<published>2025-03-19T05:11:34Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=55a0073b3beb9de8f7c1f7c44a7d0bc10126c841'/>
<id>urn:sha1:55a0073b3beb9de8f7c1f7c44a7d0bc10126c841</id>
<content type='text'>
This required implementing UPDATE RETURNING machinery that heavily
borrows from the INSERT one.
</content>
</entry>
<entry>
<title>Fixed #36481 -- Fixed QuerySet.update concrete fields check.</title>
<updated>2025-09-04T16:15:45Z</updated>
<author>
<name>Ryan P Kilby</name>
<email>kilbyr@gmail.com</email>
</author>
<published>2025-06-26T05:54:50Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=bad03eb108b029dad70cbd997f1fef221da3e415'/>
<id>urn:sha1:bad03eb108b029dad70cbd997f1fef221da3e415</id>
<content type='text'>
FieldError is now emitted for invalid update calls involving reverse
relations, where previously they failed with AttributeError.
</content>
</entry>
<entry>
<title>Fixed CVE-2025-57833 -- Protected FilteredRelation against SQL injection in column aliases.</title>
<updated>2025-09-03T11:10:58Z</updated>
<author>
<name>Jake Howard</name>
<email>git@theorangeone.net</email>
</author>
<published>2025-08-13T12:13:42Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=51711717098d3f469f795dfa6bc3758b24f69ef7'/>
<id>urn:sha1:51711717098d3f469f795dfa6bc3758b24f69ef7</id>
<content type='text'>
Thanks Eyal Gabay (EyalSec) for the report.
</content>
</entry>
<entry>
<title>Fixed #36431 -- Returned tuples for multi-column ForeignObject in values()/values_list().</title>
<updated>2025-08-29T19:33:44Z</updated>
<author>
<name>SaJH</name>
<email>wogur981208@gmail.com</email>
</author>
<published>2025-08-29T15:45:02Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=bb7a7701b1a0e8fffe14dcebf5d5bac7f176c02a'/>
<id>urn:sha1:bb7a7701b1a0e8fffe14dcebf5d5bac7f176c02a</id>
<content type='text'>
Thanks Jacob Walls and Simon Charette for tests.

Signed-off-by: SaJH &lt;wogur981208@gmail.com&gt;
</content>
</entry>
<entry>
<title>Refs #36152 -- Suppressed duplicate warning when using "%" in alias via values().</title>
<updated>2025-08-29T17:45:08Z</updated>
<author>
<name>Jacob Walls</name>
<email>jacobtylerwalls@gmail.com</email>
</author>
<published>2025-08-26T12:54:34Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=2d453a2a683d73c64dc32286685eb40cbca7c425'/>
<id>urn:sha1:2d453a2a683d73c64dc32286685eb40cbca7c425</id>
<content type='text'>
</content>
</entry>
</feed>
