Repository navigation
fix(http): keep ranged reads on one source representation - #15965
nikhilpanchal1 wants to merge 1 commit into
Conversation
|
Windows check of head Setup: Windows 11 Enterprise 22621, WinLibs GCC 15.2 UCRT, Release. The hosted Windows check does not run these tests on pull requests.
AI-assisted: yes. |
ahmadmuj
left a comment
There was a problem hiding this comment.
Checked head 5bf58636576b7b236144bc4e2b20b333bd4cae82, PR base 1882108b45b31ae837cf8a3350b0e374fcfc4194.
guest_http_client and an independent raw-loopback probe pass through the actual libSceHttp exports: 245 cases, 717 requests. The probe checks all 221 valid single-byte opaque tags, empty/multi-byte tags, and exact If-Range bytes. Backslash and obs-text survive unchanged, consistent with RFC 9110.
Conditional 206 omission and matching 200 responses pass. Rejected responses preserve the destination, position, size and cached bytes; valid retries pass. Mutations that reject backslash/obs-text or accept an embedded space fail the probe.
The HTTP module from main 94a913f1a064c693305ac9d2fee12b383609e348 accepts changed bytes from a same-size 200 without a validator; this head rejects them. That control reuses head runtime dependencies. The 200 rejection enforces this client's snapshot policy, not a general RFC requirement.
No issue found in this scope. Linux/WSL only; no full-suite, HTTP2, console or title testing.
What
A later range read could silently combine bytes from different versions of an HTTP source: after sending
If-Range, the client accepted a same-size200response that omitted its validator.Keep reads on one representation. A later full response must repeat the selected strong validator; valid conditional
206responses may omit it. Before exposing an unvalidated partial source, fetch one complete unconditional response. Reject later redirects to another resource and preserve cache, position, size and destination on failure. This follows RFC 9110 If-Range and combining parts.No competing implementation found. Recorded merge previews with #15920, #15925 and #15662 are clean; their refreshed heads are unchanged. Base-conflicted #9834, #11134 and #14212 share the debt file; their patches and discussions were checked manually and do not change this host-client gap. The refreshed new or changed PR heads touch none of this PR's five files.
Tested
Debian 13 x86-64, GCC 14.2, CMake 4.4.4, Ninja, Release, bundled dependencies. Base:
8bfe082f60d66a9152d357c8e72d7564dddbace7; tested head:5bf58636576b7b236144bc4e2b20b333bd4cae82. Current main is1882108b45b31ae837cf8a3350b0e374fcfc4194, seven documentation-only commits ahead of that base. The published branch is unchanged and has not been rebased or retested on the new base.libsbuild: 406/406 patched libraries produced.Broader HTTP2/cache testing remains incomplete: five transport modes abort on unavailable
process_vm_readv, cache aborts on unavailableprocess_vm_writev, andguest_http2_early_responsehits a server-stage deadline. These paths were stopped without retries or workarounds. No whole-suite, Windows/macOS execution, console or real-title claim.Checklist
main; no other open PR implements the same functions — pending rebase onto1882108b45b31ae837cf8a3350b0e374fcfc4194; no competing implementation foundNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)