aboutsummaryrefslogtreecommitdiffstats
path: root/docs/specs
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-09 09:47:51 +0200
committerDanilo M. <danix@danix.xyz>2026-09-09 09:47:51 +0200
commit745473b0edecc16915f761b15e58b23bc5bd69b9 (patch)
tree08565af9a952603047f45e8082fb0d990e996e70 /docs/specs
parent7fbd109ed8e00ca1184015ba50c30ee92cce1ad8 (diff)
downloadabusectl-745473b0edecc16915f761b15e58b23bc5bd69b9.tar.gz
abusectl-745473b0edecc16915f761b15e58b23bc5bd69b9.zip
fix: keep ":" literal so an IPv6 query is not over-encoded
6d5822b quoted the interpolated component with safe="", which encoded the colons of every IPv6 address: 2001:db8::1 went on the wire as 2001%3Adb8%3A%3A1. RFC 9082 specifies the IPv6 object path segment as the address in its text form, and RFC 3986 pchar permits ":" in a segment, so the colon must stay literal. The failure mode was the bad one for this tool: a registry that does not normalise before matching answers 404, which reads here as "this netblock publishes no abuse desk" rather than "we asked the wrong question", losing the abuse contact silently on exactly the IPv6 hops the tool exists to report. safe=":" keeps everything the original commit was for. "/" is still encoded, so the traversal containment is unchanged, and "%" is still encoded, so a scope id stays contained. The regression got through because the happy-path guard used an IPv4 address only. The new test asserts a documentation-range IPv6 address round-trips into the URL unencoded. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wrfqr2xqQfhtXCscU7zrdz
Diffstat (limited to 'docs/specs')
0 files changed, 0 insertions, 0 deletions