fix: close 2026-09 audit findings across config, sixel, kitty, ipc, and paste - #73
Conversation
… paste - config: atomic save creates the temp file 0600 with a unique name and carries the existing file's mode over the rename, so a config holding `server-token` no longer widens to the umask default - sixel: geometric canvas growth (was O(height x width^2) for column-at-a- time streams); DEC HLS hue 0 = blue; P2 0/2 fill with the terminal background, 1 transparent - kitty: `d=n/N` honours `p=`; uppercase delete frees images that were transmitted but never placed - ipc: keep the absolute hello deadline enforced at the stream level after the WS handshake, since tungstenite's read loops until a full message - paste: bracketed-frame bytes come out of the 8 MiB cap so a capped AppleScript/sendText payload is not rejected by the pty budget Claude-Session: https://claude.ai/code/session_01GBe292wmocEXM8SjBzjGq7
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1cd7fd94d6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| KittyDelete::ByNumber { .. } => self | ||
| .kitty_images | ||
| .get_by_number(cmd.image_number) | ||
| .map(|image| image.id), |
There was a problem hiding this comment.
Reject number deletes without an image number
When d=N omits I=, cmd.image_number is the documented “unspecified” sentinel 0, but this lookup resolves the newest image stored under number zero. Since unnumbered transmissions are indexed under zero, the new direct-candidate cleanup then frees an unrelated image that was transmitted with a=t but never placed. Guard cmd.image_number != 0, as the ID deletion path does, so a missing number cannot target image data.
Useful? React with 👍 / 👎.
Summary
server-tokenno longer widens to the umask defaultd=n/Nhonoursp=and resolves the numbered image viaget_by_number; uppercase delete frees images that were transmitted but never placedTest plan
cargo test --offline -p noa-grid -p noa-config -p noa-ipc -p noa-vt -p noa-app— all passcolumn_growth_preserves_height_capacity/row_growth_preserves_width_capacity, kitty delete-by-number / unplaced-image cases, paste cap testremote_attach::tests::transient_scrollback_failure_is_retried_for_the_active_generationflaked once in the full run (file untouched by this branch; passes 3/3 in isolation)https://claude.ai/code/session_01GBe292wmocEXM8SjBzjGq7