This is the record of an abcd-managed repository

abcdBetav0.16.2 · 2026-11-06

Development record

readDrain (internal/core/implement/loop/drain.go) accepts the free text a drain state stores in .abcd/.work.local/run/drain.json unchecked: each hand-back's reason, home, question, rule, draft and wrote fields and the judgements are copied into 'abcd drain --json' as stored (res.HandBacks = st.HandBacks), so a hand-written or repository-shipped drain.json can carry control or bidi runes (U+202E, U+009B) onto the JSON stream; the same display-spoofing class as iss-2610121206163414, which hardened the drain's stored pace. Found by the implementer of that fix.

issueresolvedminoriss-2610121505153157

readDrain (internal/core/implement/loop/drain.go) accepts the free text a drain state stores in .abcd/.work.local/run/drain.json unchecked: each hand-back's reason, home, question, rule, draft and wrote fields and the judgements are copied into 'abcd drain --json' as stored (res.HandBacks = st.HandBacks), so a hand-written or repository-shipped drain.json can carry control or bidi runes (U+202E, U+009B) onto the JSON stream; the same display-spoofing class as iss-2610121206163414, which hardened the drain's stored pace. Found by the implementer of that fix.

Security scope (abcd-fixes-what-it-adds): the route does not exist without abcd. The drain state file, its reader and the --json stream are abcd's own, so abcd added it and fixes it; a fix refuses or masks a malformed file abcd itself reads and changes nothing about how the repository works.

Frontmatter

idiss-2610121505153157
typeissue
lifecycleresolved
severityminor

mentions3