Skip to content

feat: harden URL parsing and query parameters - #23

Merged
zuudevs merged 14 commits into
mainfrom
hardening/url-query
Sep 15, 2026
Merged

zuudevs merged 14 commits into
mainfrom
hardening/url-query

Conversation

@zuudevs

@zuudevs zuudevs commented Sep 15, 2026

Copy link
Copy Markdown
Owner

Summary

Continues roadmap milestone v0.8 by closing the URL/query correctness gap in REQ-HTTP-004 and strengthening URL validation.

Query parameter API

  • adds Request::add_query_param(name, value)
  • query parameter names/values are owned by Request
  • repeated parameter names are preserved in insertion order
  • existing raw query text in the URL is preserved
  • appended parameters are serialized after the raw query
  • spaces encode as %20 rather than +
  • reserved characters are percent-encoded
  • UTF-8 input is encoded byte-for-byte
  • URI unreserved bytes remain unescaped

Redirect integration

The effective request URL now includes appended query parameters before redirect resolution. This keeps relative/query/fragment redirect behavior consistent with the actual request target while avoiding duplicate forwarding of the original query-parameter objects to redirected requests.

URL hardening

  • validates raw path/query percent escapes as complete %HH sequences
  • switches scheme comparison/normalization to ASCII-only handling
  • validates bracketed hosts as real numeric IPv6 literals using the platform numeric parser
  • accepts compressed IPv6 and IPv4-mapped IPv6 forms
  • rejects malformed bracketed literals
  • rejects unbracketed IPv6 as before
  • rejects IPv6 zone identifiers for v1
  • rejects percent-encoded authority text that the resolver does not decode in v1

Tests

Adds/extends coverage for:

  • owned query parameter storage
  • repeated parameter ordering
  • existing raw query + appended parameters
  • empty raw query marker
  • spaces/reserved/unreserved characters
  • UTF-8 byte encoding
  • effective URL generation with fragments
  • valid and malformed percent escapes
  • valid bracketed IPv6 including IPv4-mapped form
  • malformed/non-IPv6 bracketed hosts
  • v1 zone-identifier rejection

Documentation

Updates the public API contract with the query-parameter and URL-validation behavior.

Scope

This PR does not alter TCP transport, response framing, connection reuse, or redirect status/method policy. v0.8 remains in progress after this PR; the next substep is the HTTP correctness review.

@zuudevs
zuudevs merged commit 8cde9e4 into main Sep 15, 2026
6 checks passed
@zuudevs
zuudevs deleted the hardening/url-query branch September 15, 2026 01:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant