ai-psychosis/tests
Kjell Tore Guttormsen 736a1c0deb fix(hooks): close F-5 path-traversal hardening in lib.mjs, split by field
session_id becomes a raw filename segment in sessionStateFile(), so an
unvalidated value could escape STATE_DIR via path traversal (verified with
a failing test before the fix). Now allowlisted to ^[A-Za-z0-9_-]+$, with
invalid values degrading to a fixed sentinel filename rather than blocking
the hook.

cwd is a base directory, not a segment, and every real value contains "/" —
applying the same allowlist as the review's literal suggestion would reject
all legitimate absolute paths and silently disable the project-level config
override. initConfig() instead guards with isAbsolute(cwd) && no NUL byte.

Both harness-supplied, not user-controlled: defense-in-depth, not a fix for
an observed exploit. Tests added for the escape (red before fix, green
after) and for the cwd regression (a normal absolute cwd still loads
project config). Full resolution notes in docs/review-2026-06-20.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LSATejUPjGaxGnj9jkFQTo
2026-08-09 10:04:33 +02:00
..
domain-detection.test.mjs feat(ai-psychosis): add 8 paper-grounded domain patterns 2026-05-01 21:32:26 +02:00
interaction-report.test.mjs feat(ai-psychosis): /interaction-report surfaces v1.2 fields 2026-05-01 21:53:41 +02:00
lib.test.mjs fix(hooks): close F-5 path-traversal hardening in lib.mjs, split by field 2026-08-09 10:04:33 +02:00
perf.test.mjs test(ai-psychosis): perf budget validated at v1.2 pattern set 2026-05-01 21:56:14 +02:00
privacy.test.mjs test(ai-psychosis): privacy canary covers v1.2 detectors 2026-05-01 21:54:22 +02:00
prompt-analyzer.test.mjs fix(hooks): include required hookEventName in hookSpecificOutput JSON 2026-06-24 06:46:11 +02:00
session-end.test.mjs feat(ai-psychosis): promote domain_context to array for multi-domain support 2026-05-01 21:28:36 +02:00
session-start.test.mjs fix(hooks): close F-5 path-traversal hardening in lib.mjs, split by field 2026-08-09 10:04:33 +02:00
skill-md.test.mjs docs(ai-psychosis): SKILL.md cites paper Score 5 + 11 guidance criteria 2026-05-01 21:51:21 +02:00
stakes-matrix.test.mjs feat(ai-psychosis): domain-stakes weighting on alert thresholds 2026-05-01 21:46:29 +02:00
test-helper.mjs feat(ultraplan-local): v1.6.0 — /ultraresearch-local deep research command 2026-04-08 08:58:35 +02:00
tool-tracker.test.mjs fix(hooks): include required hookEventName in hookSpecificOutput JSON 2026-06-24 06:46:11 +02:00
user-info.test.mjs feat(ai-psychosis): tier-1 user-info isolation alert (per-session) 2026-05-01 21:38:51 +02:00
validation-seeking.test.mjs feat(ai-psychosis): domain-stakes weighting on alert thresholds 2026-05-01 21:46:29 +02:00