You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Rust extract_container_name treats empty segment as a container name (DELETE /containers/ is forwarded) #48
Rust (rs/src/proxy.rs, extract_container_name): returns Some("") → the lifecycle DELETE branch treats the empty string as a container name → unknown-container passthrough → Allow, and the request is forwarded to the Docker daemon.
Found during the merge-gate review of #43 (which fixed the Go side of #24; this divergence is pre-existing and not introduced there).
Impact
Low severity, same reasoning as #24: the daemon answers 404 for an empty name, so this is not exploitable on its own. But it is a real behavioural divergence between the "equal peer" implementations, and a request Go and TypeScript refuse to forward reaches the daemon when the deployment runs the Rust proxy.
Proposed solution
rs/src/proxy.rs::extract_container_name should return None for an empty name segment, matching Go/TS. Add the same test case in all three languages (DELETE /containers/ → 403) plus an integration check, so the row is pinned the way #43 pinned the reserved segments.
Alternatives considered
Making Go/TS forward like Rust: rejected — default-deny is the repo's standing posture; forwarding a malformed path is the bug, not the deny.
Go and TypeScript get regression tests only; behaviour changes in Rust alone (convergence to the majority/deny behaviour, consistent with the equal-peers rule).
Activity
docs: Go's exec check covers only the name position (#48)
fix(rs): an empty path segment is not a container name (#51)