Skip to content

Commit b987223

Browse files
committed
table_view: Ignore invalid query column names as with SQLITE_DQS=0 they don't degrade to string comparisons
1 parent 7b207e7 commit b987223

2 files changed

Lines changed: 6 additions & 2 deletions

File tree

datasette/filters.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,11 +408,15 @@ def selections(self):
408408
def has_selections(self):
409409
return bool(self.pairs)
410410

411-
def build_where_clauses(self, table):
411+
def build_where_clauses(self, table, table_columns=None):
412412
sql_bits = []
413413
params = {}
414414
i = 0
415415
for column, lookup, value in self.selections():
416+
if column != "rowid" and table_columns and column not in table_columns:
417+
# Ignore invalid column names, with SQLITE_DQS=0 they don't
418+
# degrade to harmless string literal comparisons
419+
continue
416420
filter = self._filters_by_key.get(lookup, None)
417421
if filter:
418422
sql_bit, param = filter.where_clause(table, column, value, i)

datasette/views/table.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1033,7 +1033,7 @@ async def table_view_data(
10331033

10341034
# Build where clauses from query string arguments
10351035
filters = Filters(sorted(filter_args))
1036-
where_clauses, params = filters.build_where_clauses(table_name)
1036+
where_clauses, params = filters.build_where_clauses(table_name, table_columns)
10371037

10381038
# Execute filters_from_request plugin hooks - including the default
10391039
# ones that live in datasette/filters.py

0 commit comments

Comments
 (0)