Repository navigation
fix: cap the RPC request id and keep surrogate pairs whole in a shortened message - #319
Merged
Merged
Conversation
Member
Author
|
@codex review |
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. |
|
Codex Review: Didn't find any major issues. Swish! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
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". |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The advisor on #315 found two gaps in the RPC error response caps:
RpcRequestSchemaaccepts a requestidof any length, and the server echoes the id in every response. So the size invariant that fix: keep the host running when an RPC error response cannot be built #315 added for error responses did not cover the id.sendableMessagecuts a long error message at a fixed index. That index can fall between the two halves of a surrogate pair. Then the message ends with a lone high surrogate.What changed
src/protocol/messages.ts:RpcRequestSchemaaccepts anidof at mostMAX_RPC_REQUEST_ID_CHARS(128) characters.sendRpcsends a UUID, which has 36.src/host/rpcServer.ts:extractRequestIdreturnsunknownfor an id over the cap. So the error response for such a request does not echo the id.sendableMessagesteps back one character when the cut would keep a high surrogate without its low surrogate.src/protocol/README.mdandsrc/host/README.md.Behavior changes for CLI and JSON users
None for the CLI, which always sends a UUID. A raw client that sends an id over 128 characters gets
RPC_ERRORwith the idunknown. A shortened message never ends with half of an emoji or another character outside the Basic Multilingual Plane.Verification
test/unit/protocol/messages.test.ts:RpcRequestSchemaaccepts a 129-character id.test/unit/host/rpcServer.test.ts: the server accepts a raw socket request with a 129-character id and echoes that id in its response.aplus 40,000😀ends with a lone\ud83dbefore[message truncated].vitest run test/unit: 1956 passed.tsc --noEmit,oxlint src test vitest.config.tsandoxfmt --checkpass.Refs #315
Generated with
xum• Model:anthropic:claude-opus-5-5• Thinking:xhigh