25 lines
1.1 KiB
Diff
25 lines
1.1 KiB
Diff
# UNDF: UNDF-2026-000000297
|
|
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
|
|
--- a/lib/sqlalchemy/sql/compiler.py
|
|
+++ b/lib/sqlalchemy/sql/compiler.py
|
|
@@ -1392,7 +1392,7 @@ class SQLCompiler(Compiled):
|
|
|
|
"""
|
|
- _values_bindparam: Optional[List[str]] = None
|
|
+ _values_bindparam: Optional[Set[str]] = None
|
|
|
|
_visited_bindparam: Optional[List[str]] = None
|
|
|
|
@@ -6156,9 +6156,10 @@ class SQLCompiler(Compiled):
|
|
if self.positional and visited_bindparam is not None:
|
|
counted_bindparam = len(visited_bindparam)
|
|
if self._numeric_binds:
|
|
+ # CWE-407 fix: store as Set for O(1) membership test in
|
|
+ # _process_numeric(). visited_bindparam is still a List for
|
|
+ # counting; convert to set when assigning.
|
|
if self._values_bindparam is not None:
|
|
- self._values_bindparam += visited_bindparam
|
|
+ self._values_bindparam.update(visited_bindparam)
|
|
else:
|
|
- self._values_bindparam = visited_bindparam
|
|
+ self._values_bindparam = set(visited_bindparam)
|