ci: guard against rendering meta_date_raw via {@html}
Adds a grep guard (with self-test) that fails the build if any {@html ...}
expression references metaDateRaw/documentDateRaw/rawDate. meta_date_raw is
untrusted verbatim spreadsheet text and must render via Svelte default
escaping (CWE-79). Addresses Nora's regression-guard request from #666 — a
single component test cannot catch a future {@html} introduced elsewhere.
Refs #666
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -65,6 +65,24 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
- name: Assert no raw document date rendered via {@html} (CWE-79 — #666)
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
# meta_date_raw is untrusted verbatim spreadsheet text — it must render via
|
||||||
|
# Svelte default escaping, never {@html}. This guard flags any {@html ...}
|
||||||
|
# whose expression references a raw-date variable. A comment mentioning
|
||||||
|
# "{@html}" without a raw token inside the braces does NOT match.
|
||||||
|
pattern='\{@html[^}]*(metaDateRaw|documentDateRaw|rawDate)'
|
||||||
|
# Self-test: the regex must catch the dangerous form and ignore the comment form.
|
||||||
|
printf '{@html doc.metaDateRaw}\n' | grep -qP "$pattern" \
|
||||||
|
|| { echo "FAIL: guard self-test — regex missed the unsafe {@html metaDateRaw} form"; exit 1; }
|
||||||
|
printf 'never use {@html} for this\n' | grep -qvP "$pattern" \
|
||||||
|
|| { echo "FAIL: guard self-test — regex wrongly flagged a {@html} comment"; exit 1; }
|
||||||
|
if grep -rPln "$pattern" --include='*.svelte' frontend/src/; then
|
||||||
|
echo "FAIL: meta_date_raw rendered via {@html} — use default {…} escaping (CWE-79, #666)."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Assert no (upload|download)-artifact past v3
|
- name: Assert no (upload|download)-artifact past v3
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
Reference in New Issue
Block a user