Accept exactly the SSH keys the knot accepts, and clean every remote-supplied string before it reaches a terminal.
- Major. FIDO
sk-*SSH keys are rejected and hidden, and mismatched declared types are accepted. (src/clients/git/ssh.rs:26-34, :69-82; src/cmd/key.rs:879-913) - Major.
key listandkey deleteprint record name, kind, date and rkey without cleaning. (src/cmd/key.rs:316-329, :778-780) - Major.
repo::fieldprints manifest and tag values with control characters. (src/cmd/repo/mod.rs:405) - Major. PDS and knot error messages reach stderr without cleaning. (src/main.rs:553; src/clients/atproto/pds.rs:313; src/clients/tangled/knot.rs:85-90)
- Minor.
key create --dry-run --jsonprints nothing when no key exists yet. (src/cmd/key.rs:409-422) - Minor. A private key pasted as the argument is echoed in errors. (src/cmd/key.rs:879-913, :741-749)
- Minor. Sign-only sshKey records count as push-capable. (src/clients/git/ssh.rs:39-50, :69-82)
- Minor. No-keys advice for another account suggests a command that acts as the caller. (src/cmd/key.rs:267-338)
- Minor.
column::day's fallback prints raw remote text. (src/term/column.rs:197) - Minor.
repo viewwraps text by character count, not display width. (src/cmd/repo/mod.rs:413)
Resolved by #1315, now merged.