| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| 4.9.0 source code.tar.gz | 2026-10-25 | 440.9 kB | |
| 4.9.0 source code.zip | 2026-10-25 | 541.5 kB | |
| README.md | 2026-10-25 | 2.9 kB | |
| Totals: 3 Items | 985.2 kB | 0 | |
Added
- A
max_body_sizerequest option caps a response body that hackney buffers for you (the defaulthackney:requestresult, orbody/1). It defaults to 512 MiB and also accepts the 1.x namemax_body;infinityturns it off (#980).
Fixed
- URLs that hide a loopback or private IP inside a percent-encoded bracketed IPv6 address, or behind a trailing dot, are now refused like other IP literals. The earlier fix for CVE-2026-47076 missed these two spellings, so such a URL still reached the address it denotes (#987).
- Pinning your own CA with
cacertsorcacertfilenow actually limits which servers are trusted. hackney still accepted any certificate chain that included a publicly trusted root, so a pinned connection could reach a server its CA never vouched for (#978). - Following a redirect no longer resends
basic_authandcookieto another port on the same host, or over plain HTTP after HTTPS. Only a redirect to the same scheme, host and port keeps them, unless you setlocation_trusted(#979). - A server sending an endless or highly compressed body can no longer
exhaust memory. Buffered bodies had no limit on HTTP/1.1, HTTP/2 and
HTTP/3, and
auto_decompressinflated the whole body at once. Both now stop atmax_body_sizewith{error, body_too_large}(#980). - HTTPS proxies reached through CONNECT now get the same certificate checks
as the target: hackney's CA bundle and a hostname check against the
proxy. The connection to the proxy only set the server name, so on
OTP 27 and later it failed unless
proxy_ssl_optionssetcacertsorverify_none. An explicit{verify, verify_none}is still honoured (#988). - A
proxy_auth_funthat returns a value containing CR, LF or NUL is now refused with{error, {proxy_auth_error, invalid_header}}. The value was written as is into the CONNECT request, so those bytes added header lines of their own (#989). - A slow or unreachable host no longer stalls every request that goes
through the same pool. The pool opened new connections itself, so while
one host took its time to answer, checkouts for every other host waited,
for up to
connect_timeout. The requester now opens its own connection, as in hackney 1.x (#973). - A failed TLS handshake on a pooled connection no longer frees a
max_per_hostslot held by another request. The slot was released twice, so the host could get one more concurrent connection than allowed (#984).
Changed
- Buffered downloads over 512 MiB now fail with
{error, body_too_large}unless you raisemax_body_size(#980). - If you pin
cacertsthat include the bundled public roots, hackney no longer falls back to trusting a cross-signed root it finds in the server's chain. Add the root you need to your list, or pass your ownpartial_chain(#978).