Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package haproxy for openSUSE:Factory checked in at 2026-07-07 21:00:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/haproxy (Old) and /work/SRC/openSUSE:Factory/.haproxy.new.1982 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "haproxy" Tue Jul 7 21:00:48 2026 rev:189 rq:1364029 version:3.4.2+git0.9feeb3287 Changes: -------- --- /work/SRC/openSUSE:Factory/haproxy/haproxy.changes 2026-06-27 18:06:40.133131192 +0200 +++ /work/SRC/openSUSE:Factory/.haproxy.new.1982/haproxy.changes 2026-07-07 21:02:30.816856418 +0200 @@ -1,0 +2,44 @@ +Fri Jul 03 10:14:57 UTC 2026 - Marcus Rueckert <[email protected]> + +- Update to version bfa018f: + * CLEANUP: otel: refactored flt_otel_parse_strdup() and shown src in debug + * MINOR: otel: test: added full, tcp and updown to the speed-test sweep + * MINOR: otel: test: added the err test configuration for runtime error logging + * MINOR: otel: test: added an up-down-counter test configuration + +------------------------------------------------------------------- +Fri Jul 03 10:14:56 UTC 2026 - Marcus Rueckert <[email protected]> + +- Update to version 3.4.2+git0.9feeb3287: + * [RELEASE] Released version 3.4.2 + +------------------------------------------------------------------- +Thu Jul 02 16:27:21 UTC 2026 - Marcus Rueckert <[email protected]> + +- Update to version e70a708: + * DOC: otel: test: corrected the test guides and added a tools manual + * DOC: otel: reconciled the manuals and internals docs with the code + * DOC: otel: documented the wrapper and HAProxy version requirements + * MINOR: otel: rebuilt 'flt-otel status' on the table builder + * MINOR: otel: added a reusable column-oriented table builder + * MINOR: otel: showed the records carried per export in 'flt-otel status' + * MEDIUM: otel: logged runtime errors and warnings without flooding syslog + +------------------------------------------------------------------- +Thu Jul 02 16:27:20 UTC 2026 - Marcus Rueckert <[email protected]> + +- Update to version 3.4.1+git12.89814d3b6: + * BUG/MINOR: http-htx: Don't by-pass HTX API when merging cookie values + * BUG/MINOR: mux-quic: Fix handling EOM after in qcs_http_rcv_buf() + * BUG/MAJOR: htx: Don't swap buffers for empty HTX message with an error + * BUG/MINOR: tools: fix invalid character detection in strl2ic() + * BUG/MINOR: init: fix default global settings being overwritten by -G + * MINOR: hbuf: new lightweight hbuf API + * BUG/MEDIUM: servers: Use a refcount for port_range and free it properly + * BUG/MINOR: sample: set SMP_F_CONST on srv_name fetch + * BUG/MEDIUM: server: initialise agent.health in srv_settings_init() + * BUG/MINOR: hq-interop: support transcoding of absolute URI + * BUG/MINOR: hq-interop: fix transcoding of wrapping response buffer + * BUG/MEDIUM: mux_quic: fix memory leak of rx app_buf on stream free + +------------------------------------------------------------------- Old: ---- haproxy-3.4.1+git0.3e888a769.tar.gz haproxy-opentelemetry-6344dfa.tar.gz New: ---- haproxy-3.4.2+git0.9feeb3287.tar.gz haproxy-opentelemetry-bfa018f.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ haproxy.spec ++++++ --- /var/tmp/diff_new_pack.80i6XQ/_old 2026-07-07 21:02:31.876892682 +0200 +++ /var/tmp/diff_new_pack.80i6XQ/_new 2026-07-07 21:02:31.876892682 +0200 @@ -44,10 +44,10 @@ %bcond_with opentelemetry Name: haproxy -Version: 3.4.1+git0.3e888a769 +Version: 3.4.2+git0.9feeb3287 Release: 0 %if %{with opentelemetry} -%global otel_revision 6344dfa +%global otel_revision bfa018f %global otel_subdir haproxy-opentelemetry-%{otel_revision} %global otel_additional_source -a9 %endif @@ -87,7 +87,7 @@ BuildRequires: vim BuildRequires: zlib-devel %if %{with opentelemetry} -BuildRequires: pkgconfig(opentelemetry-c-wrapper) +BuildRequires: pkgconfig(opentelemetry-c-wrapper) >= 2.2.0 %endif Provides: %{name}-doc = %{version} Obsoletes: %{name}-doc < %{version} ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.80i6XQ/_old 2026-07-07 21:02:32.000896924 +0200 +++ /var/tmp/diff_new_pack.80i6XQ/_new 2026-07-07 21:02:32.004897061 +0200 @@ -1,11 +1,11 @@ <servicedata> <service name="tar_scm"> <param name="url">http://git.haproxy.org/git/haproxy-3.4.git/</param> - <param name="changesrevision">3e888a769ec9720a3cf32b28b4401af49882c861</param> + <param name="changesrevision">9feeb3287d3f4eda464f82e83ed66e384633bf66</param> </service> <service name="tar_scm"> <param name="url">https://github.com/haproxytech/haproxy-opentelemetry.git/</param> - <param name="changesrevision">6344dfaba04acfbf2e53f381f08decefc9ccbe35</param> + <param name="changesrevision">bfa018f3d08cbf1f2b5001c689723d566dc1a6a9</param> </service> </servicedata> (No newline at EOF) ++++++ haproxy-3.4.1+git0.3e888a769.tar.gz -> haproxy-3.4.2+git0.9feeb3287.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/CHANGELOG new/haproxy-3.4.2+git0.9feeb3287/CHANGELOG --- old/haproxy-3.4.1+git0.3e888a769/CHANGELOG 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/CHANGELOG 2026-07-03 10:20:42.000000000 +0200 @@ -1,6 +1,20 @@ ChangeLog : =========== +2026/07/03 : 3.4.2 + - BUG/MEDIUM: mux_quic: fix memory leak of rx app_buf on stream free + - BUG/MINOR: hq-interop: fix transcoding of wrapping response buffer + - BUG/MINOR: hq-interop: support transcoding of absolute URI + - BUG/MEDIUM: server: initialise agent.health in srv_settings_init() + - BUG/MINOR: sample: set SMP_F_CONST on srv_name fetch + - BUG/MEDIUM: servers: Use a refcount for port_range and free it properly + - MINOR: hbuf: new lightweight hbuf API + - BUG/MINOR: init: fix default global settings being overwritten by -G + - BUG/MINOR: tools: fix invalid character detection in strl2ic() + - BUG/MAJOR: htx: Don't swap buffers for empty HTX message with an error + - BUG/MINOR: mux-quic: Fix handling EOM after in qcs_http_rcv_buf() + - BUG/MINOR: http-htx: Don't by-pass HTX API when merging cookie values + 2026/06/25 : 3.4.1 - BUG/MEDIUM: check: Skip tcpcheck post-config for external checks - BUG/MEDIUM: check: Ignore small-buffer option when starting an external check diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/Makefile new/haproxy-3.4.2+git0.9feeb3287/Makefile --- old/haproxy-3.4.1+git0.3e888a769/Makefile 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/Makefile 2026-07-03 10:20:42.000000000 +0200 @@ -966,7 +966,7 @@ OBJS += src/calltrace.o endif -HATERM_OBJS += $(OBJS) src/haterm_init.o +HATERM_OBJS += $(OBJS) src/haterm_init.o src/hbuf.o # Used only for forced dependency checking. May be cleared during development. INCLUDES = $(wildcard include/*/*.h) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/VERDATE new/haproxy-3.4.2+git0.9feeb3287/VERDATE --- old/haproxy-3.4.1+git0.3e888a769/VERDATE 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/VERDATE 2026-07-03 10:20:42.000000000 +0200 @@ -1,2 +1,2 @@ $Format:%ci$ -2026/06/25 +2026/07/03 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/VERSION new/haproxy-3.4.2+git0.9feeb3287/VERSION --- old/haproxy-3.4.1+git0.3e888a769/VERSION 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/VERSION 2026-07-03 10:20:42.000000000 +0200 @@ -1 +1 @@ -3.4.1 +3.4.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/doc/configuration.txt new/haproxy-3.4.2+git0.9feeb3287/doc/configuration.txt --- old/haproxy-3.4.1+git0.3e888a769/doc/configuration.txt 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/doc/configuration.txt 2026-07-03 10:20:42.000000000 +0200 @@ -3,7 +3,7 @@ Configuration Manual ---------------------- version 3.4 - 2026/06/25 + 2026/07/03 This document covers the configuration language as implemented in the version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/include/haproxy/hbuf.h new/haproxy-3.4.2+git0.9feeb3287/include/haproxy/hbuf.h --- old/haproxy-3.4.1+git0.3e888a769/include/haproxy/hbuf.h 1970-01-01 01:00:00.000000000 +0100 +++ new/haproxy-3.4.2+git0.9feeb3287/include/haproxy/hbuf.h 2026-07-03 10:20:42.000000000 +0200 @@ -0,0 +1,42 @@ +#ifndef _HAPROXY_HBUF_H +#define _HAPROXY_HBUF_H + +#include <stdlib.h> + +/* Very small API similar to buffer API to carefully bufferize some strings */ +#define HBUF_NULL ((struct hbuf) { }) +#define HBUF_SIZE (16 << 10) /* bytes */ + +struct hbuf { + char *area; + size_t data; + size_t size; +}; + +static inline struct hbuf *hbuf_alloc(struct hbuf *h) +{ + h->area = malloc(HBUF_SIZE); + if (!h->area) + return NULL; + + h->size = HBUF_SIZE; + h->data = 0; + return h; +} + +static inline void free_hbuf(struct hbuf *h) +{ + free(h->area); + h->area = NULL; +} + +static inline size_t hbuf_is_null(const struct hbuf *h) +{ + return h->size == 0; +} + +__attribute__ ((format(printf, 2, 3))) +void hbuf_appendf(struct hbuf *h, char *fmt, ...); +void hbuf_str_append(struct hbuf *h, const char *line); + +#endif /* _HAPROXY_HBUF_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/include/haproxy/htx.h new/haproxy-3.4.2+git0.9feeb3287/include/haproxy/htx.h --- old/haproxy-3.4.1+git0.3e888a769/include/haproxy/htx.h 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/include/haproxy/htx.h 2026-07-03 10:20:42.000000000 +0200 @@ -776,6 +776,14 @@ return (htx->head != -1); } +/* Return 1 if the message is empty and there is no parsing/internal error flag + * set. Otherwise it return 0. + */ +static inline int htx_is_empty_noerr(const struct htx *htx) +{ + return (htx_is_empty(htx) && !(htx->flags & (HTX_FL_PARSING_ERROR|HTX_FL_PROCESSING_ERROR))); +} + /* Returns 1 if no more data are expected for the message <htx>. Otherwise it * returns 0. Note that it is illegal to call this with htx == NULL. This * function relies on the HTX_FL_EOM flags. It means tunneled data are not diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/include/haproxy/port_range-t.h new/haproxy-3.4.2+git0.9feeb3287/include/haproxy/port_range-t.h --- old/haproxy-3.4.1+git0.3e888a769/include/haproxy/port_range-t.h 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/include/haproxy/port_range-t.h 2026-07-03 10:20:42.000000000 +0200 @@ -27,6 +27,7 @@ struct port_range { int size, get, put_h, put_t; /* range size, and get/put positions */ + int refcount; uint16_t ports[VAR_ARRAY]; /* array of <size> ports, in host byte order */ }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/include/haproxy/port_range.h new/haproxy-3.4.2+git0.9feeb3287/include/haproxy/port_range.h --- old/haproxy-3.4.1+git0.3e888a769/include/haproxy/port_range.h 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/include/haproxy/port_range.h 2026-07-03 10:20:42.000000000 +0200 @@ -28,6 +28,17 @@ #define GET_NEXT_OFF(range, off) ((off) == (range)->size - 1 ? 0 : (off) + 1) +static inline void port_range_release(struct port_range *range) +{ + if (range) { + int refcount = _HA_ATOMIC_SUB_FETCH(&range->refcount, 1); + + BUG_ON(refcount < 0); + if (refcount == 0) + free(range); + } +} + /* return an available port from range <range>, or zero if none is left */ static inline int port_range_alloc_port(struct port_range *range) { @@ -44,6 +55,7 @@ return 0; ret = range->ports[get]; } while (!(_HA_ATOMIC_CAS(&range->get, &get, GET_NEXT_OFF(range, get)))); + _HA_ATOMIC_INC(&range->refcount); return ret; } @@ -77,6 +89,7 @@ * can use that port. */ _HA_ATOMIC_STORE(&range->put_t, GET_NEXT_OFF(range, put)); + port_range_release(range); } /* return a new initialized port range of N ports. The ports are not @@ -90,6 +103,7 @@ if (!ret) return NULL; ret->size = n + 1; + ret->refcount = 1; /* Start at the first free element */ ret->put_h = ret->put_t = n; return ret; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/src/applet.c new/haproxy-3.4.2+git0.9feeb3287/src/applet.c --- old/haproxy-3.4.1+git0.3e888a769/src/applet.c 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/src/applet.c 2026-07-03 10:20:42.000000000 +0200 @@ -497,14 +497,14 @@ struct htx *buf_htx = NULL; size_t ret = 0; - if (htx_is_empty(appctx_htx)) { + if (htx_is_empty_noerr(appctx_htx)) { htx_to_buf(appctx_htx, &appctx->outbuf); goto out; } ret = appctx_htx->data; buf_htx = htx_from_buf(buf); - if (b_size(&appctx->outbuf) == b_size(buf) && htx_is_empty(buf_htx) && htx_used_space(appctx_htx) <= count) { + if (b_size(&appctx->outbuf) == b_size(buf) && htx_is_empty_noerr(buf_htx) && htx_used_space(appctx_htx) <= count) { htx_to_buf(buf_htx, buf); htx_to_buf(appctx_htx, &appctx->outbuf); b_xfer(buf, &appctx->outbuf, b_data(&appctx->outbuf)); @@ -599,7 +599,7 @@ size_t ret = 0; ret = buf_htx->data; - if (htx_is_empty(appctx_htx) && buf_htx->data == count) { + if (htx_is_empty_noerr(appctx_htx) && buf_htx->data == count) { htx_to_buf(appctx_htx, &appctx->inbuf); htx_to_buf(buf_htx, buf); b_xfer(&appctx->inbuf, buf, b_data(buf)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/src/backend.c new/haproxy-3.4.2+git0.9feeb3287/src/backend.c --- old/haproxy-3.4.1+git0.3e888a769/src/backend.c 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/src/backend.c 2026-07-03 10:20:42.000000000 +0200 @@ -3524,6 +3524,7 @@ return 0; smp->data.type = SMP_T_STR; + smp->flags = SMP_F_CONST; smp->data.u.str.data = strlen(smp->data.u.str.area); return 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/src/haterm_init.c new/haproxy-3.4.2+git0.9feeb3287/src/haterm_init.c --- old/haproxy-3.4.1+git0.3e888a769/src/haterm_init.c 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/src/haterm_init.c 2026-07-03 10:20:42.000000000 +0200 @@ -4,6 +4,7 @@ #include <haproxy/errors.h> #include <haproxy/global.h> #include <haproxy/openssl-compat.h> +#include <haproxy/hbuf.h> #include <haproxy/version.h> static int haterm_debug; @@ -61,103 +62,6 @@ "\ttrace h3 sink stderr level user start now verbosity minimal\n" "\ttrace qcm sink stderr level user start now verbosity minimal\n"; -/* Very small API similar to buffer API to carefully build some strings */ -#define HBUF_NULL ((struct hbuf) { }) -#define HBUF_SIZE (16 << 10) /* bytes */ -struct hbuf { - char *area; - size_t data; - size_t size; -}; - -static struct hbuf *hbuf_alloc(struct hbuf *h) -{ - h->area = malloc(HBUF_SIZE); - if (!h->area) - return NULL; - - h->size = HBUF_SIZE; - h->data = 0; - return h; -} - -static inline void free_hbuf(struct hbuf *h) -{ - ha_free(&h->area); -} - -__attribute__ ((format(printf, 2, 3))) -static void hbuf_appendf(struct hbuf *h, char *fmt, ...) -{ - va_list argp; - size_t room; - int ret; - - room = h->size - h->data; - if (!room) - return; - - va_start(argp, fmt); - ret = vsnprintf(h->area + h->data, room, fmt, argp); - if (ret >= room) - h->area[h->data] = '\0'; - else - h->data += ret; - va_end(argp); -} - -static inline size_t hbuf_is_null(const struct hbuf *h) -{ - return h->size == 0; -} - -/* Simple function, to append <line> to <b> without without - * trailing '\0' character. - * Take into an account the '\t' and '\n' escaped sequences. - */ -static void hstream_str_buf_append(struct hbuf *h, const char *line) -{ - const char *p, *end; - char *to = h->area + h->data; - char *wrap = h->area + h->size; - int nl = 0; /* terminal '\n' */ - - p = line; - end = line + strlen(line); - - /* prepend '\t' if missing */ - if (strncmp(line, "\\t", 2) != 0 && to < wrap) { - *to++ = '\t'; - h->data++; - } - - while (p < end && to < wrap) { - if (*p == '\\') { - if (!*++p || p >= end) - break; - if (*p == 'n') { - *to++ = '\n'; - if (p + 1 >= end) - nl = 1; - } - else if (*p == 't') - *to++ = '\t'; - p++; - h->data++; - } - else { - *to++ = *p++; - h->data++; - } - } - - /* add a terminal '\n' if not already present */ - if (to < wrap && !nl) { - *to++ = '\n'; - h->data++; - } -} - /* This function initialises the haterm HTTP benchmark server from * <argv>. This consists in building a configuration file in memory * using the haproxy configuration language. @@ -328,7 +232,7 @@ hbuf_appendf(&fbuf, "\toption accept-unsafe-violations-in-http-request\n"); } - hstream_str_buf_append(&fbuf, *argv); + hbuf_str_append(&fbuf, *argv); } else if (*opt == 'G') { argv++; argc--; @@ -344,7 +248,7 @@ hbuf_appendf(&gbuf, "global\n"); } - hstream_str_buf_append(&gbuf, *argv); + hbuf_str_append(&gbuf, *argv); } else if (*opt == 'T') { argv++; argc--; @@ -357,7 +261,7 @@ } haterm_debug = 1; - hstream_str_buf_append(&tbuf, *argv); + hbuf_str_append(&tbuf, *argv); } else if (*opt == 'L') { /* binding */ @@ -462,15 +366,17 @@ ha_alert("failed to allocate a buffer.\n"); goto leave; } + hbuf_appendf(&gbuf, "global\n"); - hbuf_appendf(&gbuf, "\ttune.memory.hot-size 3145728\n"); - if (has_ssl) - hbuf_appendf(&gbuf, "\texpose-experimental-directives\n"); + } + + hbuf_appendf(&gbuf, "\ttune.memory.hot-size 3145728\n"); + if (has_ssl) + hbuf_appendf(&gbuf, "\texpose-experimental-directives\n"); #if defined(USE_LINUX_SPLICE) && defined(HA_USE_KTLS) - if (has_ssl) - hbuf_appendf(&gbuf, "\ttune.pipesize 262144\n"); + if (has_ssl) + hbuf_appendf(&gbuf, "\ttune.pipesize 262144\n"); #endif - } /* "global" section */ if (!hbuf_is_null(&gbuf)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/src/hbuf.c new/haproxy-3.4.2+git0.9feeb3287/src/hbuf.c --- old/haproxy-3.4.1+git0.3e888a769/src/hbuf.c 1970-01-01 01:00:00.000000000 +0100 +++ new/haproxy-3.4.2+git0.9feeb3287/src/hbuf.c 2026-07-03 10:20:42.000000000 +0200 @@ -0,0 +1,73 @@ +#include <stdarg.h> +#include <stdio.h> +#include <string.h> + +#include <haproxy/hbuf.h> + +__attribute__ ((format(printf, 2, 3))) +void hbuf_appendf(struct hbuf *h, char *fmt, ...) +{ + va_list argp; + size_t room; + int ret; + + room = h->size - h->data; + if (!room) + return; + + va_start(argp, fmt); + ret = vsnprintf(h->area + h->data, room, fmt, argp); + if (ret >= room) + h->area[h->data] = '\0'; + else + h->data += ret; + va_end(argp); +} + +/* Simple function, to append <line> to <b> without without + * trailing '\0' character. + * Take into an account the '\t' and '\n' escaped sequeces. + */ +void hbuf_str_append(struct hbuf *h, const char *line) +{ + const char *p, *end; + char *to = h->area + h->data; + char *wrap = h->area + h->size; + int nl = 0; /* terminal '\n' */ + + p = line; + end = line + strlen(line); + + /* prepend '\t' if missing */ + if (strncmp(line, "\\t", 2) != 0 && to < wrap) { + *to++ = '\t'; + h->data++; + } + + while (p < end && to < wrap) { + if (*p == '\\') { + if (!*++p || p >= end) + break; + if (*p == 'n') { + *to++ = '\n'; + if (p + 1 >= end) + nl = 1; + } + else if (*p == 't') + *to++ = '\t'; + p++; + h->data++; + } + else { + *to++ = *p++; + h->data++; + } + } + + /* add a terminal '\n' if not already present */ + if (to < wrap && !nl) { + *to++ = '\n'; + h->data++; + } +} + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/src/hq_interop.c new/haproxy-3.4.2+git0.9feeb3287/src/hq_interop.c --- old/haproxy-3.4.1+git0.3e888a769/src/hq_interop.c 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/src/hq_interop.c 2026-07-03 10:20:42.000000000 +0200 @@ -117,7 +117,7 @@ struct buffer *htx_buf; const struct stream *strm = __sc_strm(qcs->sd->sc); const unsigned int flags = HTX_SL_F_VER_11|HTX_SL_F_XFER_LEN; - size_t to_copy = b_contig_data(b, 0); + size_t to_copy = b_data(b); size_t htx_sent = 0; uint32_t htx_space; char *head; @@ -159,7 +159,7 @@ fin = 0; } - if (b_head(b) + to_copy > b_wrap(b)) { + if (head + to_copy > b_wrap(b)) { size_t contig = b_wrap(b) - head; htx_sent = htx_add_data(htx, ist2(b_head(b), contig)); if (htx_sent < contig) { @@ -203,6 +203,7 @@ struct htx *htx = NULL; struct htx_blk *blk; struct htx_sl *sl = NULL; + struct http_uri_parser uri_parser; int32_t idx; uint32_t bsize, fsize; struct buffer *res = NULL; @@ -235,7 +236,8 @@ /* Only GET supported for HTTP/0.9. */ b_putist(res, ist("GET ")); - b_putist(res, htx_sl_req_uri(sl)); + uri_parser = http_uri_parser_init(htx_sl_req_uri(sl)); + b_putist(res, http_parse_path(&uri_parser)); b_putist(res, ist("\r\n")); htx_remove_blk(htx, blk); total += fsize; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/src/http_client.c new/haproxy-3.4.2+git0.9feeb3287/src/http_client.c --- old/haproxy-3.4.1+git0.3e888a769/src/http_client.c 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/src/http_client.c 2026-07-03 10:20:42.000000000 +0200 @@ -594,11 +594,11 @@ hc->ops.req_payload(hc); hc_htx = htxbuf(&hc->req.buf); - if (htx_is_empty(hc_htx)) + if (htx_is_empty_noerr(hc_htx)) goto out; htx = htx_from_buf(outbuf); - if (htx_is_empty(htx)) { + if (htx_is_empty_noerr(htx)) { /* Here htx_to_buf() will set buffer data to 0 because * the HTX is empty, and allow us to do an xfer. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/src/http_htx.c new/haproxy-3.4.2+git0.9feeb3287/src/http_htx.c --- old/haproxy-3.4.1+git0.3e888a769/src/http_htx.c 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/src/http_htx.c 2026-07-03 10:20:42.000000000 +0200 @@ -1956,11 +1956,8 @@ */ int http_cookie_merge(struct htx *htx, struct http_hdr *list, int first) { - uint32_t fs; /* free space */ - uint32_t bs; /* block size */ - uint32_t vl; /* value len */ - uint32_t tl; /* total length */ struct htx_blk *blk; + struct ist v; if (first < 0) return 0; @@ -1969,28 +1966,16 @@ if (!blk) return 1; - tl = list[first].v.len; - fs = htx_free_data_space(htx); - bs = htx_get_blksz(blk); - - /* for each extra cookie, we'll extend the cookie's value and insert - * ";" before the new value. - */ - fs += tl; /* first one is already counted */ - - /* Loop over cookies linked list built from http_cookie_register. */ while ((first = list[first].n.len) >= 0) { - vl = list[first].v.len; - tl += vl + 2; - if (tl > fs) + v = htx_get_blk_value(htx, blk); + blk = htx_replace_blk_value(htx, blk, ist2(istend(v), 0), ist("; ")); + if (!blk) return 1; - htx_change_blk_value_len(htx, blk, tl); - *(char *)(htx_get_blk_ptr(htx, blk) + bs + 0) = ';'; - *(char *)(htx_get_blk_ptr(htx, blk) + bs + 1) = ' '; - memcpy(htx_get_blk_ptr(htx, blk) + bs + 2, - list[first].v.ptr, vl); - bs += vl + 2; + v = htx_get_blk_value(htx, blk); + blk = htx_replace_blk_value(htx, blk, ist2(istend(v), 0), list[first].v); + if (!blk) + return 1; } return 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/src/mux_h2.c new/haproxy-3.4.2+git0.9feeb3287/src/mux_h2.c --- old/haproxy-3.4.1+git0.3e888a769/src/mux_h2.c 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/src/mux_h2.c 2026-07-03 10:20:42.000000000 +0200 @@ -7960,7 +7960,7 @@ goto end; // may be NULL if empty h2s_htx = htx_from_buf(rxbuf); - if (htx_is_empty(h2s_htx) && !(h2s_htx->flags & HTX_FL_PARSING_ERROR)) { + if (htx_is_empty_noerr(h2s_htx)) { /* Here htx_to_buf() will set buffer data to 0 because * the HTX is empty. */ @@ -7972,7 +7972,7 @@ /* <buf> is empty and the message is small enough, swap the * buffers. */ - if (htx_is_empty(buf_htx) && htx_used_space(h2s_htx) <= count) { + if (htx_is_empty_noerr(buf_htx) && htx_used_space(h2s_htx) <= count) { count -= h2s_htx->data; htx_to_buf(buf_htx, buf); htx_to_buf(h2s_htx, rxbuf); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/src/mux_quic.c new/haproxy-3.4.2+git0.9feeb3287/src/mux_quic.c --- old/haproxy-3.4.1+git0.3e888a769/src/mux_quic.c 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/src/mux_quic.c 2026-07-03 10:20:42.000000000 +0200 @@ -127,6 +127,11 @@ qcs_free_rxbuf(qcs, b); } + if (b_size(&qcs->rx.app_buf)) { + b_free(&qcs->rx.app_buf); + offer_buffers(NULL, 1); + } + /* Remove qcs from qcc tree. */ eb64_delete(&qcs->by_id); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/src/qcm_http.c new/haproxy-3.4.2+git0.9feeb3287/src/qcm_http.c --- old/haproxy-3.4.1+git0.3e888a769/src/qcm_http.c 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/src/qcm_http.c 2026-07-03 10:20:42.000000000 +0200 @@ -22,7 +22,7 @@ *fin = 0; qcs_htx = htx_from_buf(&qcs->rx.app_buf); - if (htx_is_empty(qcs_htx)) { + if (htx_is_empty_noerr(qcs_htx)) { /* Set buffer data to 0 as HTX is empty. */ htx_to_buf(qcs_htx, &qcs->rx.app_buf); goto end; @@ -31,7 +31,7 @@ ret = qcs_htx->data; cs_htx = htx_from_buf(buf); - if (htx_is_empty(cs_htx) && htx_used_space(qcs_htx) <= count) { + if (htx_is_empty_noerr(cs_htx) && htx_used_space(qcs_htx) <= count) { /* EOM will be copied to cs_htx via b_xfer(). */ if ((qcs_htx->flags & HTX_FL_EOM) && !(qcs->flags & QC_SF_EOI_SUSPENDED)) { @@ -47,9 +47,8 @@ htx_xfer(cs_htx, qcs_htx, count, HTX_XFER_DEFAULT); BUG_ON(qcs_htx->flags & HTX_FL_PARSING_ERROR); - /* Copy EOM from src to dst buffer if all data copied. */ - if (htx_is_empty(qcs_htx) && (qcs_htx->flags & HTX_FL_EOM)) { - cs_htx->flags |= HTX_FL_EOM; + /* EOM was copied to cs_htx if all data were copied. */ + if (cs_htx->flags & HTX_FL_EOM) { if (!(qcs->flags & QC_SF_EOI_SUSPENDED)) *fin = 1; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/src/server.c new/haproxy-3.4.2+git0.9feeb3287/src/server.c --- old/haproxy-3.4.1+git0.3e888a769/src/server.c 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/src/server.c 2026-07-03 10:20:42.000000000 +0200 @@ -2889,7 +2889,7 @@ srv->agent.inter = DEF_CHKINTR; srv->agent.fastinter = 0; srv->agent.downinter = 0; - srv->agent.rise = DEF_AGENT_RISETIME; + srv->agent.rise = srv->agent.health = DEF_AGENT_RISETIME; srv->agent.fall = DEF_AGENT_FALLTIME; srv->agent.port = 0; @@ -3246,6 +3246,7 @@ ha_free(&srv_tlv->fmt_string); ha_free(&srv_tlv); } + port_range_release(srv->conn_src.sport_range); } /* Deallocate a server <srv> and its member. <srv> must be allocated. For diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/haproxy-3.4.1+git0.3e888a769/src/tools.c new/haproxy-3.4.2+git0.9feeb3287/src/tools.c --- old/haproxy-3.4.1+git0.3e888a769/src/tools.c 2026-06-25 15:54:08.000000000 +0200 +++ new/haproxy-3.4.2+git0.9feeb3287/src/tools.c 2026-07-03 10:20:42.000000000 +0200 @@ -2584,8 +2584,8 @@ */ int strl2ic(const char *s, int len) { - int i = 0; - int j, k; + int i = 0, k; + unsigned int j; if (len > 0) { if (*s != '-') { ++++++ haproxy-opentelemetry-6344dfa.tar.gz -> haproxy-opentelemetry-bfa018f.tar.gz ++++++ ++++ 4075 lines of diff (skipped)
