From 911b1619ab62317aaa7594d5fd52c1b8e43969a0 Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Fri, 17 Nov 2023 19:56:19 -0500 Subject: [PATCH] Refs #34975 -- Handled optional source expressions in Expression.get_refs(). While no code is directly exercising get_refs in a way that triggers a crash some expressions such as Window stash None in source_expressions which can obscure the origin of some bugs. Handling None values like we do in other source_expression traversing methods such as .contains_aggregates ensures we don't run into surprises in the future where get_refs() might be used for a different purpose. --- django/db/models/expressions.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/django/db/models/expressions.py b/django/db/models/expressions.py index 3a0c75ebf2..74ae9cab8e 100644 --- a/django/db/models/expressions.py +++ b/django/db/models/expressions.py @@ -417,6 +417,8 @@ class BaseExpression: def get_refs(self): refs = set() for expr in self.get_source_expressions(): + if expr is None: + continue refs |= expr.get_refs() return refs