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)

Reply via email to