v3.5-dev5
📦 haproxyView on GitHub →
✨ 6 features🐛 86 fixes⚡ 1 deprecations🔧 47 symbols
Summary
This release introduces configuration support for 'all' and 'none' in tune.defaults.purge and deprecates tune.takeover-other-tg-connections. It also includes numerous bug fixes across various modules like proxy, hpack, SSL, and QUIC, along with updates to the SLZ library.
Migration Steps
- The "tune.takeover-other-tg-connections" setting is deprecated and should be reviewed for removal or replacement.
✨ New Features
- Configuration now supports "all" and "none" for "tune.defaults.purge".
- Added a new converter has_ctl() to detect control characters.
- Added fips_mode() config condition predicate for SSL.
- SSL now reports FIPS mode in -vv for OpenSSL >= 3.0.
- Added a "debug dev abort" debugging command.
- Added a new version of complain() that takes a debug_count struct.
🐛 Bug Fixes
- Watcher is now released in various commands on CLI abort.
- Watcher is now released in "show default-server" on CLI abort.
- HPACK now encodes long methods and schemes using the long form.
- Stats-file rejects tgid 0 when preloading shm objects.
- HLua uses a local buffer to format socket addresses.
- Mux-FCGI checks the room left before appending the index.
- SPOE clears the applet pointer when the applet fails to start.
- Mux-FCGI does not call fcgi_strm_destroy() on a NULL stream.
- HTTP-ANA does not crash on "keep-query" in a response redirect.
- Stick-tables use the same bucket for string keys with a NUL.
- Sock bounds the recvmsg() length when receiving old sockets.
- HTTP-ANA checks the cookie rewrite result before moving the offsets.
- Mux-FCGI sanitizes STDERR records before logging them.
- Log encoding helpers have clarified comments.
- Log always reserves room for trailing 0 when using CBOR encoding helpers.
- JWE validates the secret length against the algorithm of the token.
- JWT does not take an extra reference on the certificate public key.
- SSL requires a full-length AEAD tag when decrypting with AES-GCM.
- ACME does not delete a NULL token from the map.
- SSL rejects server certificate names containing a NUL byte.
- ACME restricts the permissions of the generated account key.
- FD releases the port range entry in host byte order.
- Connection reserves the whole CRC32C TLV before saving its pointer.
- Session does not release a reversed connection twice on error.
- LB-CHASH bounds the walk when the saved cursor changed tree.
- Debug only dumps the trace once in __BUG_ON_ONCE().
- Mux-H2 strips the userinfo when deriving :authority for a server.
- QUIC prevents out-of-bound read on wrapping CRYPTO content.
- QUIC stress CRYPTO Rx buffer wrapping.
- QUIC drops multiple Retry on same connection.
- Lua resumes Channel:send() from the unsent part of the string.
- HLua_fcn ensures systematic bref cleanup for patref list iterator.
- SSL add ssl_c_policies sample fetch.
- SLZ does not read past the end of the input around the match loop.
- SLZ fixes the documented worst case size of flush() and finish().
- SLZ uses the exact switch cost for the last literals of a block.
- SLZ bounds the bits wasted by the 9-bit literals.
- SLZ does not append a block to an already finished stream.
- SLZ fixes the adler32 accumulators signedness on 32-bit.
- SLZ avoids undefined shifts when building the word byte by byte.
- SLZ clarifies that the size promise applies to the stream, not to a call.
- SLZ/USLZ fixes incorrect sign extension in shift when reading the adler32 trailer.
- SLZ/USLZ doesn't reset the drain offset when nothing was decoded.
- SLZ/USLZ doesn't lose the bytes consumed by the header fast paths.
- SLZ/USLZ makes the gzip FEXTRA field resumable.
- SLZ/USLZ widens crc_flush, it overflowed on large stored blocks.
- SLZ/USLZ verifies the trailer checksum before reporting completion.
- SLZ/USLZ decodes all the members of a multi-member gzip stream.
- SLZ/USLZ adds a method to impose an envelope format (gzip or zlib).
- SLZ/USLZ inlines the bit reader and the huffman decoders.
- SLZ/USLZ defers the output bookkeeping to a checkpoint.
- Cache retains the primary or secondary entry only when detaching its row.
- Cache does not retain incomplete or stripped secondary entry.
- Cache does not release an entry under the cache read lock.
- WURFL fixes memory leak of information list and patch strings at deinit.
- SLZ prevents build compilation error due to unused __slz_make_crc_table().
- SSL rejects an embedded NUL in the ssl_*_dn(entry) fetches.
- SSL rejects an embedded NUL in the full-DN ssl_*_dn() fetches.
- QUIC avoids a division by zero in the BBR pacing interval.
- Server fixes memory leak on "default-server" parsing failures.
- H3 fixes potential NULL pointer dereference in _h3_trace_header().
- HQ_interop fixes potential NULL dereference in _hq_trace_http().
- Server fixes off-by-one error when parsing and copying source port range.
- HTTP fixes authority parsing for absolute-form URI with empty path.
- BWlim fixes a stick-table entry leak in shared mode.
- SSL skips tests broken by FIPS mode.
- Checks skip tcp-check-client-hello.vtc under FIPS mode.
- Debug checks the match count in __BUG_ON_ONCE() and not in complain().
- Debug deduplicates __ABORT_NOW() between DEBUG_USE_ABORT and ha_crash_now().
- Debug moves printing of the hint to ha_backtrace_to_stderr().
- Debug uses bit fields for the debug type and fatality.
- Debug only emits and counts warnings when explicitly requested.
- Debug makes the complain() function start to complete the message.
- Debug makes the complain() function print the prefix.
- Debug uses (RS) to delimit the condition from vaargs in DBG_COUNT().
- Debug uses (RS) to delimit the condition from vaargs in complain().
- Debug makes the complain() function print the suffix.
- Debug passes the type to the __BUG_ON*() macros.
- Debug unifies __BUG_ON() and __BUG_ON_ONCE().
- Debug avoids the break in __BUG_ON().
- Debug makes a pair of __BUG_ON() for modern and obsolete linkers.
- Debug relies on the __dbg_cnt_ counter for _BUG_ON_ONCE().
- Debug stores the caller's details in debug_count.
- Debug prepares complain() to be used in multiple ways.
- Debug does not dump a context-less backtrace in ABORT_NOW().
- Debug merges the counter and message emission into complain().
Affected Symbols
tune.defaults.purgeproxyhpackstats-filehluaharingmux-fcgispoehttp-anastick-tablessocklog/toolslogjwejwtsslacmebackendpipesfdconnectionlb-chashdebugmux-h2quicluahlua_fcnslzslz/uslzcachewurflserverh3hq_interophttpbwlimcliha_backtrace_to_stderrbug.hcomplainDBG_COUNT__BUG_ON__BUG_ON_ONCEha_crash_nowabort_with_line__ABORT_NOWDEBUG_USE_ABORT
⚡ Deprecations
- tune.takeover-other-tg-connections is deprecated.