Skip to content

2.18.3 — redaction reads a URL as a URL parser does

Choose a tag to compare

@BenKalsky BenKalsky released this 17 Sep 22:17
7d89ebd

Redaction now reads a URL the way a URL parser does (#116).

What ships

  • A backslash is a slash under a scheme. Under http:, https:, ws:, wss:, ftp: or a protocol-relative prefix (//host, ///host), every backslash — literal, or encoded as %5C, \, \, \ — is read as the path separator a WHATWG parser makes of it, so https://hooks.zapier.com\hooks\catch\1\SECRET is redacted whole, and the stage 1 cut that used to leave \catch\1\SECRET behind is closed. A backslash after a bare host with no scheme, Windows and UNC paths and file: URLs are kept by design.
  • Hostnames are normalised under UTS-46 before matching. A generated table from Unicode 18.0.0's IDNA mapping (1526 entries: fullwidth and mathematical letters, 。 . 。, and deletions of the zero-width space, soft hyphen, word joiner, BOM and variation selectors) maps the host before the receiver patterns run, without intl. hooks.zapier.com and hooks。zapier.com are redacted like hooks.zapier.com.
  • Userinfo and ports as a parser reads them: the last @ delimits userinfo (a@b@host; an encoded slash or backslash inside it stays userinfo), and an empty port (host:\path) is a port.
  • Memory: a field of millions of words with a stage 1 cut now peaks at about 3× its size instead of 18×.

Known limits

  • A plain https://host:/path with nothing encoded is a stage 1 miss — #121.
  • TAB, LF and CR inside a URL are not stripped (a parser strips them).
  • Encoded lookalikes: an encoded scheme colon or encoded slashes before a receiver host (file://host\x, file:%2f%2f%2fhost\x) are redacted — over-redaction, never a leak.

Ships #120 (implementation) and #122 (release). Spec: Digitizers/Aura docs/superpowers/specs/2026-09-17-redaction-url-reading-design.md (amendment to follow).