Development record
readSeries (internal/core/implement/loop/nextseries.go) checks a series file's intent, run_id and outcome but not its stored pace flags (flags.pace, flags.sub_agents, flags.fix_rounds), so a hand-written or repository-shipped .abcd/.work.local/run/next.json can carry control or bidi runes (for example U+202E, U+009B) in them; on a series move that picks nothing (window or cap), those strings reach 'abcd build next --json' unvalidated and encoding/json leaves them raw. Low severity: display spoofing of the JSON text on a terminal, no read, write or exec. Found by the security reviewer, round 2 of run-2610110908001704 lane-1.
readSeries (internal/core/implement/loop/nextseries.go) checks a series file's intent, run_id and outcome but not its stored pace flags (flags.pace, flags.sub_agents, flags.fix_rounds), so a hand-written or repository-shipped .abcd/.work.local/run/next.json can carry control or bidi runes (for example U+202E, U+009B) in them; on a series move that picks nothing (window or cap), those strings reach 'abcd build next --json' unvalidated and encoding/json leaves them raw. Low severity: display spoofing of the JSON text on a terminal, no read, write or exec. Found by the security reviewer, round 2 of run-2610110908001704 lane-1.
Security scope (abcd-fixes-what-it-adds): the route does not exist without abcd. The series file, its reader and the --json stream that echoes it are all abcd's own, so abcd added it and fixes it; the fix refuses a malformed file abcd itself reads and changes nothing about how the repository works.
Frontmatter
| id | iss-2610120925598775 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2610120925598775-readseries-internal-core-implement-loop.md
open on GitHub ↗ · commit history ↗
mentions1
- iss-2610121206163414readSeries (internal/core/implement/loop/nextseries.go) still accepts the stored pace provenance strings in .abcd/.work.local/run/next.json unchecked: each pace setting's layer and origin (pace.*.layer, pace.*.origin) is free text that reaches 'abcd build next --json' raw, so a hand-written or repository-shipped series file can carry control or bidi runes there, the same display-spoofing class iss-2610120925598775 closed for the stored flags. The same Pace shape is read from a run's state.json and echoed by 'implement record --json'. Found by the implementer fixing iss-2610120925598775.