What's Changed
Breaking change (behavioral)
- Stop percent-decoding HTTP request header values.
parse_header()previously applieddecode_path_component()to every header value (exceptLocation/Referer) afteris_field_value()validation, so wire sequences like%0D%0Apassed validation and expanded into literal CR/LF inside stored values — enabling response splitting, log injection, and proxy smuggling.%3D/%2C/%3Blikewise flippedCookieandX-Forwarded-Forboundaries against WAFs inspecting the wire form. RFC 9110 §5.5 specifies header values as opaque octets, so the auto-decode (and theLocation/Refererworkarounds for the same misbehavior) has been removed. Applications that need URI semantics on a header value should now calldecode_uri_component()ordecode_path_component()on the result explicitly. Fixes the long-standingReferer-with-%0Aissue (#2033) (fbb031e)
Bug fixes
- Make
ThreadPoolconstructor exception-safe on partial thread creation. Ifstd::threadconstruction throws partway through (e.g.pthread_createreturnsEAGAINunder thread-resource pressure), the partially-builtthreads_vector would destruct joinablestd::threadobjects and callstd::terminate(). The spawn loop now signals shutdown to the workers already created, joins them, and rethrows. Fix #2444 (#2445)
Tooling
scripts/release.shgains a--minorflag to force a minor bump even whenabidiffreports no ABI break, for behavioral breaking changes like the header-decoding fix above (e8e6528)