Correct escaping for HTML display of row links

pull/222/head
Russ Garrett 2018-04-15 22:48:30 +01:00 zatwierdzone przez Simon Willison
rodzic aaf59db570
commit b231d4243d
2 zmienionych plików z 15 dodań i 9 usunięć

Wyświetl plik

@ -524,10 +524,11 @@ class RowTableShared(BaseView):
cells.append({
'column': 'Link',
'value': jinja2.Markup(
'<a href="/{database}/{table}/{flat_pks}">{flat_pks}</a>'.format(
'<a href="/{database}/{table}/{flat_pks_quoted}">{flat_pks}</a>'.format(
database=database,
table=urllib.parse.quote_plus(table),
flat_pks=path_from_row_pks(row, pks, not pks),
flat_pks=str(jinja2.escape(path_from_row_pks(row, pks, not pks, False))),
flat_pks_quoted=path_from_row_pks(row, pks, not pks)
)
),
})

Wyświetl plik

@ -38,14 +38,19 @@ def urlsafe_components(token):
]
def path_from_row_pks(row, pks, use_rowid):
def path_from_row_pks(row, pks, use_rowid, quote=True):
""" Generate an optionally URL-quoted unique identifier
for a row from its primary keys."""
if use_rowid:
return urllib.parse.quote_plus(str(row['rowid']))
bits = []
for pk in pks:
bits.append(
urllib.parse.quote_plus(str(row[pk]))
)
bits = [row['rowid']]
else:
bits = [row[pk] for pk in pks]
if quote:
bits = [urllib.parse.quote_plus(str(bit)) for bit in bits]
else:
bits = [str(bit) for bit in bits]
return ','.join(bits)