Change8

v3.5-dev5

📦 haproxyView on GitHub →
6 features🐛 86 fixes1 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

  1. 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

⚡ Deprecations

  • tune.takeover-other-tg-connections is deprecated.