Hi,

HAProxy 3.0.21 was released on 2026/04/30. It added 17 new commits
after version 3.0.20.

Two major issues were fixed by this release. The first one was related to the
scheme-based normalization. The presence of commas in Host header and authority
was permitted and would be used to compare the values, which then would differ
when read via hdr(host) which splits them on commas, and under certain
circumstances, trigger crashes (at least it did in the OSS-Fuzz environment
when injecting the values directly at the HTX layer). The issue was fixed.
Remains the case of the comma characters in authorities. Even though the spec
permits commas in authorities (not in domain names), there is currently no use
case for this and it causes an ambiguity with the historical use of hdr(host),
so we preferred to just deny them. The change was performed on the 3.4-dev10
and postponed for the next 3.3 release. It will probably be backported to lower
versions too.

The other major issue was about the H1 multiplexer and the way size of chunks
were emitted on 32-bit machines. Only the 32 lower bits of the chunk size were
advertise, which could be used to form request or response smuggling. All 3.x
versions were affected.

Otherwise, a regression was introduced in 3.2.16 on the task scheduler, leading
to a deadlock with the lock held by idle connections tasks. It's difficult to
reproduce but sadly it happens much more often than the one it was fixing. A
new fix was emitted which better addresses the issue.

An issue in the FCGI multiplexer was fixed. The function responsible to emit
FCGI_PARAM records was not handling cases of full buffer in a consistant
way. The issue was quite limited, but the "http-send-name-header" option could
be silently ignored. The issue was fixed by reworking this function.

The scheme-based normalization was fixed to properly handle case of OPTIONS
requests. As stated in RFC9110#4.2.3, when the scheme-based normalization is
performed, an empty path must be normalized to "/", except for OPTIONS request.

Finally, some memory leaks on error path here and there (sample, tools) and
minor issues were also fixed.

Unfortunately, shortly after the 3.0.20, it is recommended to update again.

Thanks everyone for your help !

Please find the usual URLs below :
   Site index       : https://www.haproxy.org/
   Documentation    : https://docs.haproxy.org/
   Wiki             : https://github.com/haproxy/wiki/wiki
   Discourse        : https://discourse.haproxy.org/
   Slack channel    : https://slack.haproxy.org/
   Issue tracker    : https://github.com/haproxy/haproxy/issues
   Q&A from devs    : https://github.com/orgs/haproxy/discussions
   Sources          : https://www.haproxy.org/download/3.0/src/
   Git repository   : https://git.haproxy.org/git/haproxy-3.0.git/
   Git Web browsing : https://git.haproxy.org/?p=haproxy-3.0.git
   Changelog        : https://www.haproxy.org/download/3.0/src/CHANGELOG
   Dataplane API    : 
https://github.com/haproxytech/dataplaneapi/releases/latest
   Pending bugs     : https://www.haproxy.org/l/pending-bugs
   Reviewed bugs    : https://www.haproxy.org/l/reviewed-bugs
   Code reports     : https://www.haproxy.org/l/code-reports
   Latest builds    : https://www.haproxy.org/l/dev-packages


---
Complete changelog :
Christopher Faulet (7):
      DOC: config: Fix log-format example with last rule expressions
      BUG/MAJOR: http-htx: Store new host in a chunk for scheme-based 
normalization
      BUG/MEDIUM: http-htx: Don't use data from HTX message to update authority
      BUG/MEDIUM: http-htx: Loop on full host value during scheme based 
normalization
      BUG/MAJOR: mux-h1: Deal with true 64-bits integer to emit chunks size
      BUG/MEDIUM: mux-fcgi: Properly handle full buffer for FCGI_PARAM record
      BUG/MINOR: http-htx: Don't normalize emtpy path for OPTIONS requests

Olivier Houchard (1):
      BUG/MEDIUM: tasks: Do not loop in task_schedule() if a task is running

William Lallemand (1):
      BUILD: 51d: fix bool definition on dummy lib v4

Willy Tarreau (8):
      BUG/MINOR: tools: my_memspn/my_memcspn wrong cast causing incorrect byte 
reading
      BUG/MINOR: tools: fix memory leak in indent_msg() on out of memory
      BUG/MINOR: sample: fix memory leak in check_when_cond() when ACL is not 
found
      BUG/MINOR: peers: fix logical "and" when checking for local in 
PEER_APP_ST_STARTING
      BUG/MINOR: peers: fix wrong flag reported twice for dump_flags
      BUG/MEDIUM: mux_h1: fix stack buffer overflow in h1_append_chunk_size()
      BUG/MINOR: fix various typos and spelling mistakes in user-visible 
messages
      BUG/MINOR: payload: prevent integer overflow in distcc token parsing

--
Christopher Faulet



Reply via email to