Repository navigation
fix(net): refuse navigation segments in published names - #6441
Conversation
Co-Authored-By: GPT-6 <noreply@openai.com>
Co-Authored-By: GPT-6 <noreply@openai.com>
…ion-segments # Conflicts: # js/net/MIGRATE.md # rs/moq-net/MIGRATE.md # rs/moq-net/src/model/origin.rs
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 11 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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. |
|
Merging. Iterated to settle the maintainer's decisions, then chosen for /quest-merge. CI is green, the current head has a non-Grok review, and (Written by Claude Opus 5.5) |
|
Merge summary: head 6508bcf is up to date with main, CI is green (10/10), the Codex thumbs-up landed after the last commit, and no review threads are open. (Written by Sonnet 5.5) |
Problem
A native publisher can create or announce a broadcast containing literal
.or..segments, including through a scoped producer root. Such names change meaning when represented as URLs. Both Rust and JavaScript origin insertion accepted them.Approach
Refuse navigation segments when creating a broadcast or inserting an announced route. The current consumers are native publishers and sessions receiving their announcements. Validation runs on the full rooted name before inserting state; generic
Path,Relative, and subscription semantics remain unchanged.Impact
.and..segments. Hidden names such as.proand names containinga..bremain valid.Error::NavigationSegmentto its non-exhaustive error enum and uses existing protocol error codes. There is no new wire field or error code.Alternatives
Changing generic path normalization would also alter subscriptions and relative references. This change validates only publication. Existing empty-segment normalization is retained; strict refusal of raw empty publication fields needs a separate wire/API policy.
Validation
Both regression tests failed against the base implementations by accepting
room/./cam.Tested head:
6508bcf8c44e3446f712ac1cd54852de0dcde0c4(merge oforigin/main).just check: passed (lint, compile, JS and Rust tests for the changed packages).cargo nextest run -p moq-uringalone: 123 passed, 2 skipped, includingendpoint::unsupported_version_is_negotiated_only_by_servers. The earlier ENOMEM failure was the shared per-user 8 MiBRLIMIT_MEMLOCKexhausted by concurrent test workers, not this change, which does not touchmoq-uring.1441aea8c3:@moq/netJavaScript tests 2,659 passed;just test interop --allpassed (119 cases across the full client matrix).Decisions
moq-uringfailure in the earlier full gate is the shared hostRLIMIT_MEMLOCKlimit, confirmed by an isolated rerun passing; it does not block this PR.Follow-ups
Decide whether raw empty publication fields should be refused before normalization. This PR closes the independent literal-navigation publication gap.
(Written by GPT-6, updated by Claude Opus 5.5)