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-04-25 21:36:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/haproxy (Old)
 and      /work/SRC/openSUSE:Factory/.haproxy.new.11940 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "haproxy"

Sat Apr 25 21:36:20 2026 rev:181 rq:1349028 version:3.3.7+git0.a32bce2da

Changes:
--------
--- /work/SRC/openSUSE:Factory/haproxy/haproxy.changes  2026-04-20 
16:14:06.144134272 +0200
+++ /work/SRC/openSUSE:Factory/.haproxy.new.11940/haproxy.changes       
2026-04-25 21:36:49.736444763 +0200
@@ -1,0 +2,43 @@
+Thu Apr 23 20:14:13 UTC 2026 - Marcus Rueckert <[email protected]>
+
+- Update to version 3.3.7+git0.a32bce2da:
+  * [RELEASE] Released version 3.3.7
+  * BUG/MEDIUM: mux-h1: Force close mode for bodyless message announcing a C-L
+  * BUG/MAJOR: mux-h2: detect incomplete transfers on HEADERS frames as well
+  * BUG/MINOR: server: fix a possible leak of an error message in dynamic 
servers
+  * BUG/MINOR: debug: properly mark the entire libs archive read-only
+  * BUG/MINOR: compression: properly disable request when setting response
+  * CI: github: only enable OS X on development branches
+  * CI: VTest build with git clone + cache
+  * SCRIPTS: build-vtest: allow to set a TMPDIR and a DESTDIR
+
+-------------------------------------------------------------------
+Thu Apr 23 09:48:25 UTC 2026 - Marcus Rueckert <[email protected]>
+
+- Update to version 3.3.6+git110.27ea9dccd:
+  * REGTESTS: ssl: mark ssl_dh.vtc as broken
+  * REGTESTS: Never reuse server connection in 
server/cli_delete_dynamic_server.vtc
+  * REGTESTS: Never reuse server connection in jwt/jws_verify.vtc
+  * DOC: config: Fix a typo for "external-check" directive
+  * BUG/MINOR: mux-h1: Fix test to skip trailers from chunked messages
+  * BUG/MINOR: mux-h1: Fix condition to send null-chunk for bodyless message
+  * BUG/MINOR: log: also wait for the response when logging response headers
+  * BUG/MINOR: H2: Don't forget to free shared_rx_bufs on failure
+  * BUG/MINOR: h2: Don't look at the exclusive bit for PRIORITY frame
+  * BUG/MINOR: h2: make tune.h2.log-errors actually work
+  * BUG/MEDIUM: tasks: Make sure we don't schedule a task already running
+  * BUG/MINOR: mux-h2: count a proto error when rejecting a stream on parsing 
error
+  * BUG/MINOR: mux-h2: count a protocol error when failing to parse a trailer
+  * reg-tests/ssl/ssl_dh.vtc: fix syntax error
+  * BUG/MAJOR: sched: protect task->expire on 32-bit platforms
+
+-------------------------------------------------------------------
+Tue Apr 21 09:35:30 UTC 2026 - Marcus Rueckert <[email protected]>
+
+- Update to version 3.3.6+git95.410f6cbff:
+  * BUG/MINOR: sample: adjust dependencies for channel output bytes counters
+  * MINOR: sample: make RQ/RS stats available everywhere
+  * BUG/MINOR: log: consider format expression dependencies to decide when to 
log
+  * BUG/MINOR: mux_quic: limit avail_streams() to 2^62
+
+-------------------------------------------------------------------

Old:
----
  haproxy-3.3.6+git91.af5637e93.tar.gz

New:
----
  haproxy-3.3.7+git0.a32bce2da.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ haproxy.spec ++++++
--- /var/tmp/diff_new_pack.x2ZJtf/_old  2026-04-25 21:36:52.736566199 +0200
+++ /var/tmp/diff_new_pack.x2ZJtf/_new  2026-04-25 21:36:52.744566522 +0200
@@ -35,7 +35,7 @@
 %bcond_with ech
 
 Name:           haproxy
-Version:        3.3.6+git91.af5637e93
+Version:        3.3.7+git0.a32bce2da
 Release:        0
 #
 Summary:        The Reliable, High Performance TCP/HTTP Load Balancer

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.x2ZJtf/_old  2026-04-25 21:36:53.288588543 +0200
+++ /var/tmp/diff_new_pack.x2ZJtf/_new  2026-04-25 21:36:53.324590000 +0200
@@ -5,7 +5,7 @@
   </service>
   <service name="tar_scm">
     <param name="url">http://git.haproxy.org/git/haproxy-3.3.git/</param>
-    <param 
name="changesrevision">af5637e93f7aeab7718b4f45c7bf7377d31f576b</param>
+    <param 
name="changesrevision">a32bce2da931b0e5b0ef5c630a3a53f37c32733b</param>
   </service>
 </servicedata>
 (No newline at EOF)

++++++ haproxy-3.3.6+git91.af5637e93.tar.gz -> 
haproxy-3.3.7+git0.a32bce2da.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-3.3.6+git91.af5637e93/.github/actions/setup-vtest/action.yml 
new/haproxy-3.3.7+git0.a32bce2da/.github/actions/setup-vtest/action.yml
--- old/haproxy-3.3.6+git91.af5637e93/.github/actions/setup-vtest/action.yml    
2026-04-17 10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/.github/actions/setup-vtest/action.yml     
2026-04-23 21:32:22.000000000 +0200
@@ -20,7 +20,21 @@
         ulimit -n 65536
         ulimit -c unlimited
 
+    - name: Get VTest latest commit SHA
+      id: vtest-sha
+      shell: bash
+      run: |
+        echo "sha=$(git ls-remote https://code.vinyl-cache.org/vtest/VTest2 
HEAD | cut -f1)" >> $GITHUB_OUTPUT
+
+    - name: Cache VTest
+      id: cache-vtest
+      uses: actions/cache@v4
+      with:
+        path: ${{ github.workspace }}/../vtest
+        key: vtest-${{ runner.os }}-${{ steps.vtest-sha.outputs.sha }}
+
     - name: Install VTest
+      if: steps.cache-vtest.outputs.cache-hit != 'true'
       shell: bash
       run: |
         scripts/build-vtest.sh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/.github/matrix.py 
new/haproxy-3.3.7+git0.a32bce2da/.github/matrix.py
--- old/haproxy-3.3.6+git91.af5637e93/.github/matrix.py 2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/.github/matrix.py  2026-04-23 
21:32:22.000000000 +0200
@@ -293,24 +293,21 @@
                 }
             )
 
-    # macOS
-
-    if is_stable:
-        os = "macos-13"     # stable branch
-    else:
+    # macOS on dev branches
+    if "haproxy-" not in ref_name:
         os = "macos-26"     # development branch
 
-    TARGET = "osx"
-    for CC in ["clang"]:
-        matrix.append(
-            {
-                "name": "{}, {}, no features".format(os, CC),
-                "os": os,
-                "TARGET": TARGET,
-                "CC": CC,
-                "FLAGS": [],
-            }
-        )
+        TARGET = "osx"
+        for CC in ["clang"]:
+            matrix.append(
+                {
+                    "name": "{}, {}, no features".format(os, CC),
+                    "os": os,
+                    "TARGET": TARGET,
+                    "CC": CC,
+                    "FLAGS": [],
+                }
+            )
 
     # Print matrix
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/CHANGELOG 
new/haproxy-3.3.7+git0.a32bce2da/CHANGELOG
--- old/haproxy-3.3.6+git91.af5637e93/CHANGELOG 2026-04-17 10:06:23.000000000 
+0200
+++ new/haproxy-3.3.7+git0.a32bce2da/CHANGELOG  2026-04-23 21:32:22.000000000 
+0200
@@ -1,6 +1,126 @@
 ChangeLog :
 ===========
 
+2026/04/23 : 3.3.7
+    - BUG/MINOR: mworker: fix sort order of mworker_proc in 'show proc'
+    - BUG/MINOR: sock: adjust accept() error messages for ENFILE and ENOMEM
+    - BUG/MINOR: qpack: fix 62-bit overflow and 1-byte OOB reads in decoding
+    - MEDIUM: sched: do not run a same task multiple times in series
+    - MINOR: sched: do not requeue a tasklet into the current queue
+    - MINOR: sched: do not punish self-waking tasklets anymore
+    - MEDIUM: sched: do not punish self-waking tasklets if TASK_WOKEN_ANY
+    - MEDIUM: sched: change scheduler budgets to lower TL_BULK
+    - MINOR: mux-h2: assign a limited frames processing budget
+    - BUILD: sched: fix leftover of debugging test in single-run changes
+    - BUG/MEDIUM: acme: fix multiple resource leaks in acme_x509_req()
+    - BUG/MINOR: acme: leak of ext_san upon insertion error
+    - BUG/MINOR: acme: wrong error when checking for duplicate section
+    - BUG/MINOR: acme/cli: wrong argument check in 'acme renew'
+    - Revert "BUG/MEDIUM: mux-h2: make sure to always report pending errors to 
the stream"
+    - DOC: config: Fix alphabetical ordering of proxy options
+    - DOC: config: Fix alphabetical ordering of external-check directives
+    - DOC: config: Add missing 'status-code' param for 'http-check expect' 
directive
+    - DOC: config: Reorder params for 'tcp-check expect' directive
+    - BUG/MINOR: stats-file: manipulate shm-stats-file heartbeat using 
unsigned int
+    - BUG/MEDIUM: stats-file: detect and fix inconsistent shared clock when 
resuming from shm-stats-file
+    - BUG/MINOR: proxy: detect strdup error on server auto SNI
+    - BUG/MINOR: server: set auto SNI for dynamic servers
+    - BUG/MINOR: server: enable no-check-sni-auto for dynamic servers
+    - BUG/MINOR: quic: fix counters used on BE side
+    - BUG/MINOR: quic/h3: display QUIC/H3 backend module on HTML stats
+    - BUG/MINOR: acme: acme_ctx_destroy() leaks auth->dns
+    - BUG/MINOR: acme: wrong labels logic always memprintf errmsg
+    - BUG/MINOR: acme: fix incorrect number of arguments allowed in config
+    - BUG/MEDIUM: spoe: Acquire context buffer in applet before consuming a 
frame
+    - MINOR: ncbmbuf: improve itbmap_next() code
+    - BUG/MINOR: quic: missing app ops init during backend 0-RTT sessions
+    - BUG/MINOR: acme: free() DER buffer on a2base64url error path
+    - BUG/MINOR: acme: replace atol with len-bounded __strl2uic() for 
retry-after
+    - BUG/MINOR: acme/cli: fix argument check and error in 'acme 
challenge_ready'
+    - BUILD: tools: potential null pointer dereference in dl_collect_libs_cb
+    - BUG/MINOR: ech: permission checks on the CLI
+    - BUG/MINOR: acme: permission checks on the CLI
+    - BUG/MINOR: config: Properly test warnif_misplaced_* return values
+    - BUG/MINOR: http-ana: Only consider client abort for abortonclose
+    - BUG/MEDIUM: acme: skip doing challenge if it is already valid
+    - BUG/MINOR: acme: fix task allocation leaked upon error
+    - CI: github: fix tag listing by implementing proper API pagination
+    - BUG/MINOR: quic: close conn on packet reception with incompatible frame
+    - BUG/MINOR: stconn: Always declare the SC created from healthchecks as a 
back SC
+    - MINOR: stconn: flag the stream endpoint descriptor when the app has 
started
+    - MINOR: mux-h2: report glitches on early RST_STREAM
+    - SCRIPTS: git-show-backports: list new commits and how to review them 
with -L
+    - BUG/MEDIUM: ssl/cli: tls-keys commands warn when accessed without admin 
level
+    - BUG/MEDIUM: ssl/ocsp: ocsp commands warn when accessed without admin 
level
+    - BUG/MEDIUM: map/cli: map/acl commands warn when accessed without admin 
level
+    - BUG/MEDIUM: ssl/cli: tls-keys commands are missing permission checks
+    - BUG/MEDIUM: ssl/ocsp: ocsp commands are missing permission checks
+    - BUG/MEDIUM: map/cli: CLI commands lack admin permission checks
+    - DOC: configuration: mention QUIC server support
+    - BUG/MEDIUM: mux-h1: Don't set MSG_MORE on bodyless responses forwarded 
to client
+    - BUG/MINOR: tcpcheck: Remove unexpected flag on tcpcheck rules for 
httchck option
+    - BUG/MINOR: tcpcheck: Don't enable http_needed when parsing HTTP samples
+    - BUG/MINOR: tcpcheck: Use tcpcheck context for expressions parsing
+    - BUG/MINOR: quic: fix documentation for transport params decoding
+    - BUG/MINOR: cfgcond: properly set the error pointer on evaluation error
+    - BUG/MINOR: cfgcond: always set the error string on openssl_version checks
+    - BUG/MINOR: cfgcond: always set the error string on awslc_api checks
+    - BUG/MINOR: cfgcond: fail cleanly on missing argument for "feature"
+    - DOC: config: fix ambiguous info in log-steps directive description
+    - BUG/MEDIUM: mux-h1: Disable 0-copy forwarding when draining the request
+    - BUG/MINOR: http-act: fix a typo in the "pause" action error message
+    - BUG/MINOR: counters: fix unexpected 127 char GUID truncation for 
shm-stats-file objects
+    - BUG/MEDIUM: payload: validate SNI name_len in req.ssl_sni
+    - BUG/MEDIUM: jwt: fix heap overflow in ECDSA signature DER conversion
+    - BUG: hlua: fix stack overflow in httpclient headers conversion
+    - BUG/MINOR: hlua: fix stack overflow in httpclient headers conversion
+    - BUG/MINOR: hlua: fix format-string vulnerability in Patref error path
+    - BUG/MINOR: peers: fix OOB heap write in dictionary cache update
+    - BUG/MAJOR: slz: always make sure to limit fixed output to less than 
worst case literals
+    - BUG/MINOR: resolvers: fix memory leak on AAAA additional records
+    - BUG/MINOR: spoe: fix pointer arithmetic overflow in spoe_decode_buffer()
+    - BUG/MEDIUM: samples: Fix handling of SMP_T_METH samples
+    - BUG/MINOR: sample: fix info leak in regsub when exp_replace fails
+    - BUG/MEDIUM: mux-fcgi: prevent record-length truncation with large bufsize
+    - BUG/MINOR: hlua: fix use-after-free of HTTP reason string
+    - BUG/MINOR: ot: fixed wrong NULL check in flt_ot_parse_cfg_group()
+    - BUG/MINOR: log: Fix error message when using unavailable fetch in logfmt
+    - BUG/MEDIUM: cli: Properly handle too big payload on a command line
+    - BUG/MEDIUM: htx: Fix function used to change part of a block value when 
defrag
+    - BUG/MEDIUM: htx: Don't count delta twice when block value is replaced
+    - BUG/MINOR: acme: don't pass NULL into format string
+    - BUG/MEDIUM: peers: trash of expired entries delayed after fullresync
+    - BUG/MINOR: threads: properly set the number of tgroups when non using 
policy
+    - BUG/MEDIUM: mux-h2: ignore conn->owner when deciding if a connection is 
dead
+    - BUG/MINOR: task: fix uninitialised read in run_tasks_from_lists()
+    - BUG/MINOR: mux_quic: limit avail_streams() to 2^62
+    - BUG/MINOR: log: consider format expression dependencies to decide when 
to log
+    - MINOR: sample: make RQ/RS stats available everywhere
+    - BUG/MINOR: sample: adjust dependencies for channel output bytes counters
+    - BUG/MAJOR: sched: protect task->expire on 32-bit platforms
+    - reg-tests/ssl/ssl_dh.vtc: fix syntax error
+    - BUG/MINOR: mux-h2: count a protocol error when failing to parse a trailer
+    - BUG/MINOR: mux-h2: count a proto error when rejecting a stream on 
parsing error
+    - BUG/MEDIUM: tasks: Make sure we don't schedule a task already running
+    - BUG/MINOR: h2: make tune.h2.log-errors actually work
+    - BUG/MINOR: h2: Don't look at the exclusive bit for PRIORITY frame
+    - BUG/MINOR: H2: Don't forget to free shared_rx_bufs on failure
+    - BUG/MINOR: log: also wait for the response when logging response headers
+    - BUG/MINOR: mux-h1: Fix condition to send null-chunk for bodyless message
+    - BUG/MINOR: mux-h1: Fix test to skip trailers from chunked messages
+    - DOC: config: Fix a typo for "external-check" directive
+    - REGTESTS: Never reuse server connection in jwt/jws_verify.vtc
+    - REGTESTS: Never reuse server connection in 
server/cli_delete_dynamic_server.vtc
+    - REGTESTS: ssl: mark ssl_dh.vtc as broken
+    - SCRIPTS: build-vtest: allow to set a TMPDIR and a DESTDIR
+    - CI: VTest build with git clone + cache
+    - CI: github: only enable OS X on development branches
+    - BUG/MINOR: compression: properly disable request when setting response
+    - BUG/MINOR: debug: properly mark the entire libs archive read-only
+    - BUG/MINOR: server: fix a possible leak of an error message in dynamic 
servers
+    - BUG/MAJOR: mux-h2: detect incomplete transfers on HEADERS frames as well
+    - BUG/MEDIUM: mux-h1: Force close mode for bodyless message announcing a 
C-L
+
 2026/03/19 : 3.3.6
     - BUG/MEDIUM: shctx: Use the next block when data exactly filled a block
     - BUG/MINOR: mworker: don't set the PROC_O_LEAVING flag on master process
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/VERDATE 
new/haproxy-3.3.7+git0.a32bce2da/VERDATE
--- old/haproxy-3.3.6+git91.af5637e93/VERDATE   2026-04-17 10:06:23.000000000 
+0200
+++ new/haproxy-3.3.7+git0.a32bce2da/VERDATE    2026-04-23 21:32:22.000000000 
+0200
@@ -1,2 +1,2 @@
 $Format:%ci$
-2026/03/19
+2026/04/23
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/VERSION 
new/haproxy-3.3.7+git0.a32bce2da/VERSION
--- old/haproxy-3.3.6+git91.af5637e93/VERSION   2026-04-17 10:06:23.000000000 
+0200
+++ new/haproxy-3.3.7+git0.a32bce2da/VERSION    2026-04-23 21:32:22.000000000 
+0200
@@ -1 +1 @@
-3.3.6
+3.3.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/doc/configuration.txt 
new/haproxy-3.3.7+git0.a32bce2da/doc/configuration.txt
--- old/haproxy-3.3.6+git91.af5637e93/doc/configuration.txt     2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/doc/configuration.txt      2026-04-23 
21:32:22.000000000 +0200
@@ -3,7 +3,7 @@
                           Configuration Manual
                          ----------------------
                               version 3.3
-                              2026/03/19
+                              2026/04/23
 
 
 This document covers the configuration language as implemented in the version
@@ -7580,7 +7580,7 @@
   Arguments :
     <command> is the external command to run
 
-  The arguments passed to the to the command are:
+  The arguments passed to the command are:
 
   <proxy_address> <proxy_port> <server_address> <server_port>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-3.3.6+git91.af5637e93/include/haproxy/mux_quic.h 
new/haproxy-3.3.7+git0.a32bce2da/include/haproxy/mux_quic.h
--- old/haproxy-3.3.6+git91.af5637e93/include/haproxy/mux_quic.h        
2026-04-17 10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/include/haproxy/mux_quic.h 2026-04-23 
21:32:22.000000000 +0200
@@ -59,6 +59,9 @@
 /* This bit is set for unidirectional streams */
 #define QCS_ID_DIR_BIT           0x2
 
+/* Maximum bidirectional stream ID that a client can opened. */
+#define QCS_ID_MAX_STRM_CL_BIDI (QUIC_VARINT_8_BYTE_MAX - 3)
+
 static inline enum qcs_type qcs_id_type(uint64_t id)
 {
        return id & QCS_ID_TYPE_MASK;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-3.3.6+git91.af5637e93/include/haproxy/task-t.h 
new/haproxy-3.3.7+git0.a32bce2da/include/haproxy/task-t.h
--- old/haproxy-3.3.6+git91.af5637e93/include/haproxy/task-t.h  2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/include/haproxy/task-t.h   2026-04-23 
21:32:22.000000000 +0200
@@ -128,6 +128,12 @@
  * pointer if the task/tasklet remains valid, and return NULL if it has been
  * deleted. The scheduler relies on this to know if it should update its state
  * on return.
+ *
+ * Keep in mind that tasks can be cast to tasklets while in the final tasklet
+ * queues, and will be listed via the tasklet's <list> instead of the task's
+ * <rq>. However other fields (wq, common) must remain totally valid for the
+ * task during this time. This explains why certain elements are present in
+ * the common part even though pure tasklets do not need them.
  */
 #define TASK_COMMON                                                    \
        unsigned int state; /* task state : bitfield of TASK_   */ \
@@ -138,14 +144,14 @@
        uint32_t wake_date;              /* date of the last task wakeup */ \
        unsigned int calls;              /* number of times process was called 
*/ \
        TASK_DEBUG_STORAGE;                                     \
-       short last_run;                  /* 16-bit now_ms of last run */
-       /* a 16- or 48-bit hole remains here and is used by task */
+       short last_run;                  /* 16-bit now_ms of last run */        
  \
+       short nice;                      /* task prio from -1024 to +1024 */    
  \
+       int expire;                      /* next expiration date for this task, 
in ticks */
+       /* total: 36 or 48 bytes on 32/64 bit platforms */
 
 /* The base for all tasks */
 struct task {
        TASK_COMMON;                    /* must be at the beginning! */
-       short nice;                     /* task prio from -1024 to +1024 */
-       int expire;                     /* next expiration date for this task, 
in ticks */
        struct eb32_node rq;            /* ebtree node used to hold the task in 
the run queue */
        /* WARNING: the struct task is often aliased as a struct tasklet when
         * it is NOT in the run queue. The tasklet has its struct list here
@@ -158,7 +164,6 @@
 /* lightweight tasks, without priority, mainly used for I/Os */
 struct tasklet {
        TASK_COMMON;                    /* must be at the beginning! */
-       /* 48-bit hole here */
        struct list list;
        /* WARNING: the struct task is often aliased as a struct tasklet when
         * it is not in the run queue. The task has its struct rq here where
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/include/haproxy/task.h 
new/haproxy-3.3.7+git0.a32bce2da/include/haproxy/task.h
--- old/haproxy-3.3.6+git91.af5637e93/include/haproxy/task.h    2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/include/haproxy/task.h     2026-04-23 
21:32:22.000000000 +0200
@@ -713,12 +713,27 @@
 
 #ifdef USE_THREAD
        if (task->tid < 0) {
+               int was_running;
+               /*
+                * Make sure the task is not already running before changing
+                * its expire, otherwise it could overwrite our modification
+                */
+               if (task == th_ctx->current)
+                       was_running = 1;
+               else {
+                       was_running = 0;
+                       while (HA_ATOMIC_FETCH_OR(&task->state, TASK_RUNNING) & 
TASK_RUNNING)
+                               __ha_cpu_relax();
+               }
+
                /* FIXME: is it really needed to lock the WQ during the check ? 
*/
                HA_RWLOCK_WRLOCK(TASK_WQ_LOCK, &wq_lock);
                if (task_in_wq(task))
                        when = tick_first(when, task->expire);
 
                task->expire = when;
+               if (!was_running)
+                       task_drop_running(task, 0);
                if (!task_in_wq(task) || tick_is_lt(task->expire, 
task->wq.key)) {
                        if (likely(caller)) {
                                caller = HA_ATOMIC_XCHG(&task->caller, caller);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-3.3.6+git91.af5637e93/reg-tests/jwt/jws_verify.vtc 
new/haproxy-3.3.7+git0.a32bce2da/reg-tests/jwt/jws_verify.vtc
--- old/haproxy-3.3.6+git91.af5637e93/reg-tests/jwt/jws_verify.vtc      
2026-04-17 10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/reg-tests/jwt/jws_verify.vtc       
2026-04-23 21:32:22.000000000 +0200
@@ -18,7 +18,7 @@
 
 server s1 -repeat 27 {
   rxreq
-  txresp
+  txresp -hdr "Connection: close"
 } -start
 
 haproxy h1 -conf {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-3.3.6+git91.af5637e93/reg-tests/server/cli_delete_dynamic_server.vtc
 new/haproxy-3.3.7+git0.a32bce2da/reg-tests/server/cli_delete_dynamic_server.vtc
--- 
old/haproxy-3.3.6+git91.af5637e93/reg-tests/server/cli_delete_dynamic_server.vtc
    2026-04-17 10:06:23.000000000 +0200
+++ 
new/haproxy-3.3.7+git0.a32bce2da/reg-tests/server/cli_delete_dynamic_server.vtc 
    2026-04-23 21:32:22.000000000 +0200
@@ -8,14 +8,14 @@
 # static server
 server s1 -repeat 3 {
        rxreq
-       txresp \
+       txresp -hdr "Connection: close" \
          -body "resp from s1"
 } -start
 
 # use as a dynamic server, added then deleted via CLI
 server s2 -repeat 3 {
        rxreq
-       txresp \
+       txresp -hdr "Connection: close" \
          -body "resp from s2"
 } -start
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-3.3.6+git91.af5637e93/reg-tests/ssl/ssl_dh.vtc 
new/haproxy-3.3.7+git0.a32bce2da/reg-tests/ssl/ssl_dh.vtc
--- old/haproxy-3.3.6+git91.af5637e93/reg-tests/ssl/ssl_dh.vtc  2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/reg-tests/ssl/ssl_dh.vtc   2026-04-23 
21:32:22.000000000 +0200
@@ -1,4 +1,6 @@
-#REGTEST_TYPE=devel
+#REGTEST_TYPE=broken
+
+# test seems broken since it was fixed in 3610a767
 
 # This reg-tests checks that the DH-related mechanisms works properly.
 # When no DH is specified, either directly in the server's PEM or through a
@@ -19,7 +21,7 @@
 
 varnishtest "Test the DH related SSL options"
 # AWS-LC does not support any FFDH ciphersuites
-feature cmd "$HAPROXY_PROGRAM -cc 'feature(OPENSSL) && 
!ssllib_name_startswith(AWS-LC)' && !ssllib_name_startswith(wolfSSL)'"
+feature cmd "$HAPROXY_PROGRAM -cc 'feature(OPENSSL) && 
!ssllib_name_startswith(AWS-LC) && !ssllib_name_startswith(wolfSSL)'"
 feature cmd "command -v openssl && command -v grep && command -v socat"
 feature ignore_unknown_macro
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/scripts/build-vtest.sh 
new/haproxy-3.3.7+git0.a32bce2da/scripts/build-vtest.sh
--- old/haproxy-3.3.6+git91.af5637e93/scripts/build-vtest.sh    2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/scripts/build-vtest.sh     2026-04-23 
21:32:22.000000000 +0200
@@ -1,10 +1,10 @@
 #!/bin/sh
 
+DESTDIR=${DESTDIR:-${PWD}/../vtest/}
+TMPDIR=${TMPDIR:-$(mktemp -d)}
 set -eux
 
-curl -fsSL "https://code.vinyl-cache.org/vtest/VTest2/archive/main.tar.gz"; -o 
VTest.tar.gz
-mkdir ../vtest
-tar xvf VTest.tar.gz -C ../vtest --strip-components=1
+git clone https://code.vinyl-cache.org/vtest/VTest2 "${TMPDIR}/vtest"
 # Special flags due to: https://github.com/vtest/VTest/issues/12
 
 # Note: do not use "make -C ../vtest", otherwise MAKEFLAGS contains "w"
@@ -13,7 +13,7 @@
 # MFLAGS works on BSD but misses variable definitions on GNU Make.
 # Better just avoid the -C and do the cd ourselves then.
 
-cd ../vtest
+cd "${TMPDIR}/vtest"
 
 set +e
 CPUS=${CPUS:-$(nproc 2>/dev/null)}
@@ -28,3 +28,6 @@
 else
    make -j${CPUS} FLAGS="-O2 -s -Wall"
 fi
+
+mkdir -p "${DESTDIR}"
+cp "${TMPDIR}/vtest/vtest" "${DESTDIR}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/src/flt_http_comp.c 
new/haproxy-3.3.7+git0.a32bce2da/src/flt_http_comp.c
--- old/haproxy-3.3.6+git91.af5637e93/src/flt_http_comp.c       2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/src/flt_http_comp.c        2026-04-23 
21:32:22.000000000 +0200
@@ -940,7 +940,7 @@
                        comp->flags &= ~COMP_FL_DIR_RES;
                        comp->flags |= COMP_FL_DIR_REQ;
                } else if (strcmp(args[2], "response") == 0) {
-                       comp->flags &= COMP_FL_DIR_REQ;
+                       comp->flags &= ~COMP_FL_DIR_REQ;
                        comp->flags |= COMP_FL_DIR_RES;
                } else if (strcmp(args[2], "both") == 0)
                        comp->flags |= COMP_FL_DIR_REQ | COMP_FL_DIR_RES;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/src/log.c 
new/haproxy-3.3.7+git0.a32bce2da/src/log.c
--- old/haproxy-3.3.6+git91.af5637e93/src/log.c 2026-04-17 10:06:23.000000000 
+0200
+++ new/haproxy-3.3.7+git0.a32bce2da/src/log.c  2026-04-23 21:32:22.000000000 
+0200
@@ -1091,6 +1091,14 @@
                        px->to_log |= LW_XPRT;
                        if (px->http_needed)
                                px->to_log |= LW_REQ;
+
+                       /* anything involving the response needs to happen at 
response time */
+                       if (expr->fetch->use & 
(SMP_USE_HRSHP|SMP_USE_HRSHV|SMP_USE_HRSBO))
+                               px->to_log |= LW_RESP;
+
+                       /* anything involving the end of the response needs to 
happen after final bytes */
+                       if (expr->fetch->use & 
(SMP_USE_HRSBO|SMP_USE_RQFIN|SMP_USE_RSFIN|SMP_USE_TXFIN|SMP_USE_SSFIN))
+                               px->to_log |= LW_BYTES;
                }
                else if (lf->type == LOG_FMT_ALIAS) {
                        if (!default_px && !http_mode &&
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/src/mux_h1.c 
new/haproxy-3.3.7+git0.a32bce2da/src/mux_h1.c
--- old/haproxy-3.3.6+git91.af5637e93/src/mux_h1.c      2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/src/mux_h1.c       2026-04-23 
21:32:22.000000000 +0200
@@ -2811,6 +2811,13 @@
                        h1s->flags = (h1s->flags & ~H1S_F_WANT_MSK) | 
H1S_F_WANT_CLO;
                        TRACE_STATE("force close mode (T-E + HTTP/1.0)", 
H1_EV_TX_DATA|H1_EV_TX_HDRS, h1s->h1c->conn, h1s);
                }
+               else if ((h1m->flags & H1_MF_CLEN) && h1m->body_len != 0 &&
+                        htx_is_unique_blk(htx, blk) && (htx->flags & 
HTX_FL_EOM) &&
+                        (!(h1m->flags & H1_MF_RESP) || !(h1s->flags & 
H1S_F_BODYLESS_RESP))) {
+                       /* C-L but no data for non-bodyless response or for a 
request: force close */
+                       h1s->flags = (h1s->flags & ~H1S_F_WANT_MSK) | 
H1S_F_WANT_CLO;
+                       TRACE_STATE("force close mode (C-L without data)", 
H1_EV_TX_DATA|H1_EV_TX_HDRS, h1s->h1c->conn, h1s);
+               }
 
                /* the conn_mode must be processed. So do it */
                n = ist("connection");
@@ -2935,7 +2942,8 @@
                 * payload. If cannot be removed now. We must emit the end of
                 * the message first to be sure the output buffer is not full
                 */
-               if ((h1m->flags & H1_MF_CHNK) && !(h1s->flags & 
H1S_F_BODYLESS_RESP)) {
+               if ((h1m->flags & H1_MF_CHNK) && (!(h1m->flags & H1_MF_RESP) || 
!(h1s->flags & H1S_F_BODYLESS_RESP))) {
+                       /* Send null-chunk except for bodyless reasponses */
                        if (!chunk_memcat(&outbuf, "\r\n0\r\n\r\n", 7))
                                goto full;
                }
@@ -3415,8 +3423,8 @@
                                goto nextblk;
 
                        /* Skip the trailers because the corresponding conf 
option was set */
-                       if ((!(h1m->flags & H1_MF_RESP) && (h1c->px->options & 
PR_O_HTTP_DROP_RES_TRLS)) ||
-                           ((h1m->flags & H1_MF_RESP) && (h1c->px->options & 
PR_O_HTTP_DROP_REQ_TRLS)))
+                       if ((!(h1m->flags & H1_MF_RESP) && (h1c->px->options & 
PR_O_HTTP_DROP_REQ_TRLS)) ||
+                           ((h1m->flags & H1_MF_RESP) && (h1c->px->options & 
PR_O_HTTP_DROP_RES_TRLS)))
                                goto nextblk;
 
                        n = htx_get_blk_name(htx, blk);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/src/mux_h2.c 
new/haproxy-3.3.7+git0.a32bce2da/src/mux_h2.c
--- old/haproxy-3.3.6+git91.af5637e93/src/mux_h2.c      2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/src/mux_h2.c       2026-04-23 
21:32:22.000000000 +0200
@@ -1492,6 +1492,7 @@
   fail:
        task_destroy(t);
        tasklet_free(h2c->wait_event.tasklet);
+       pool_free(pool_head_h2_rx_bufs, h2c->shared_rx_bufs);
        pool_free(pool_head_h2c, h2c);
   fail_no_h2c:
        if (!conn_is_back(conn))
@@ -3403,7 +3404,11 @@
                return 0;
        }
 
-       if (h2_get_n32(&h2c->dbuf, 0) == h2c->dsi) {
+       /*
+        * Bit 31 is the "exclusive" bit, it is not part of the stream id,
+        * so ignore it when checking if the stream id is ours.
+        */
+       if ((h2_get_n32(&h2c->dbuf, 0) & 0x7fffffff) == h2c->dsi) {
                /* 7540#5.3 : can't depend on itself */
                h2c_report_glitch(h2c, 1, "PRIORITY depends on itself");
                TRACE_ERROR("PRIORITY depends on itself", 
H2_EV_RX_FRAME|H2_EV_RX_WU, h2c->conn);
@@ -3532,8 +3537,10 @@
                                /* Failed to decode this frame (e.g. too large 
request)
                                 * but the HPACK decompressor is still 
synchronized.
                                 */
+                               session_inc_http_err_ctr(h2c->conn->owner);
+                               
HA_ATOMIC_INC(&h2c->px_counters->strm_proto_err);
                                h2_sess_log_strm(h2c->conn->owner);
-                               h2s_error(h2s, H2_ERR_INTERNAL_ERROR);
+                               h2s_error(h2s, H2_ERR_PROTOCOL_ERROR);
                                TRACE_USER("Stream error decoding H2 trailers", 
H2_EV_RX_FRAME|H2_EV_RX_HDR|H2_EV_STRM_NEW|H2_EV_STRM_END, h2c->conn, 0, 
h2s_rxbuf_tail(h2s));
                                h2c->st0 = H2_CS_FRAME_E;
                                goto out;
@@ -3617,6 +3624,7 @@
                }
 
                /* recoverable stream error (e.g. too large request) */
+               HA_ATOMIC_INC(&h2c->px_counters->strm_proto_err);
                h2_sess_log_strm(h2c->conn->owner);
                TRACE_USER("rcvd unparsable H2 request", 
H2_EV_RX_FRAME|H2_EV_RX_HDR|H2_EV_STRM_NEW|H2_EV_STRM_END, h2c->conn, h2s, 
&rxbuf);
                goto strm_err;
@@ -6314,6 +6322,15 @@
                        TRACE_STATE("invalid interim response with ES flag", 
H2_EV_RX_FRAME|H2_EV_RX_HDR|H2_EV_H2C_ERR|H2_EV_PROTO_ERR, h2c->conn);
                        goto fail;
                }
+               /* Note that bodyless only applies to responses, even when
+                * reported on the request (e.g. HEAD).
+                */
+               if ((msgf & H2_MSGF_BODY_CL) && *body_len > 0 &&
+                   (!(h2c->flags & H2_CF_IS_BACK) || !(*flags & 
H2_SF_BODYLESS_RESP))) {
+                       h2c_report_glitch(h2c, 1, "ES on HEADERS before end of 
content-length");
+                       TRACE_STATE("ES on HEADERS before end of 
content-length", H2_EV_RX_FRAME|H2_EV_RX_HDR|H2_EV_H2C_ERR|H2_EV_PROTO_ERR, 
h2c->conn);
+                       goto fail;
+               }
                /* no more data are expected for this message */
                htx->flags |= HTX_FL_EOM;
                *flags |= H2_SF_ES_RCVD;
@@ -8727,11 +8744,11 @@
 
        /* backend/frontend/default */
        vptr = &h2_settings_log_errors;
-       if (strcmp(args[1], "none"))
+       if (strcmp(args[1], "none") == 0)
                *vptr = H2_ERR_LOG_ERR_NONE;
-       else if (strcmp(args[1], "connection"))
+       else if (strcmp(args[1], "connection") == 0)
                *vptr = H2_ERR_LOG_ERR_CONN;
-       else if (strcmp(args[1], "stream"))
+       else if (strcmp(args[1], "stream") == 0)
                *vptr = H2_ERR_LOG_ERR_STRM;
        else {
                memprintf(err, "'%s' expects 'none', 'connection', or 
'stream'", args[0]);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/src/mux_quic.c 
new/haproxy-3.3.7+git0.a32bce2da/src/mux_quic.c
--- old/haproxy-3.3.6+git91.af5637e93/src/mux_quic.c    2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/src/mux_quic.c     2026-04-23 
21:32:22.000000000 +0200
@@ -3145,18 +3145,21 @@
 {
        struct server *srv = __objt_server(conn->target);
        struct qcc *qcc = conn->ctx;
-       int max_fctl, max_reuse = 0;
+       int ret, max_reuse = 0;
 
-       max_fctl = qcc_fctl_avail_streams(qcc, 1);
+       ret = qcc_fctl_avail_streams(qcc, 1);
 
        if (srv->max_reuse >= 0) {
                max_reuse = qcc->tot_sc <= srv->max_reuse ?
                  srv->max_reuse - qcc->tot_sc + 1: 0;
-               return MIN(max_fctl, max_reuse);
-       }
-       else {
-               return max_fctl;
+               ret = MIN(ret, max_reuse);
        }
+
+       /* Ensure we do not exceed the maximum usable stream ID. */
+       if (unlikely(ret > QCS_ID_MAX_STRM_CL_BIDI - qcc->next_bidi_l))
+               ret = QCS_ID_MAX_STRM_CL_BIDI - qcc->next_bidi_l;
+
+       return ret;
 }
 
 /* Returns the number of streams currently attached into <conn> connection.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/src/sample.c 
new/haproxy-3.3.7+git0.a32bce2da/src/sample.c
--- old/haproxy-3.3.6+git91.af5637e93/src/sample.c      2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/src/sample.c       2026-04-23 
21:32:22.000000000 +0200
@@ -266,39 +266,39 @@
                           SMP_VAL___________ | SMP_VAL_BE_CHK_RUL | 
SMP_VAL___________ |
                           SMP_VAL___________ ),
 
-       [SMP_SRC_RQFIN] = (SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
+       [SMP_SRC_RQFIN] = (SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL_FE_REQ_CNT |
+                          SMP_VAL_FE_HRQ_HDR | SMP_VAL_FE_HRQ_BDY | 
SMP_VAL_FE_SET_BCK |
+                          SMP_VAL_BE_REQ_CNT | SMP_VAL_BE_HRQ_HDR | 
SMP_VAL_BE_HRQ_BDY |
+                          SMP_VAL_BE_SET_SRV | SMP_VAL_BE_SRV_CON | 
SMP_VAL_BE_RES_CNT |
+                          SMP_VAL_BE_HRS_HDR | SMP_VAL_BE_HRS_BDY | 
SMP_VAL_BE_STO_RUL |
+                          SMP_VAL_FE_RES_CNT | SMP_VAL_FE_HRS_HDR | 
SMP_VAL_FE_HRS_BDY |
                           SMP_VAL_FE_LOG_END | SMP_VAL___________ | 
SMP_VAL___________ |
                           SMP_VAL___________ ),
 
        [SMP_SRC_RSFIN] = (SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
                           SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
                           SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
+                          SMP_VAL_BE_SET_SRV | SMP_VAL_BE_SRV_CON | 
SMP_VAL_BE_RES_CNT |
+                          SMP_VAL_BE_HRS_HDR | SMP_VAL_BE_HRS_BDY | 
SMP_VAL_BE_STO_RUL |
+                          SMP_VAL_FE_RES_CNT | SMP_VAL_FE_HRS_HDR | 
SMP_VAL_FE_HRS_BDY |
                           SMP_VAL_FE_LOG_END | SMP_VAL___________ | 
SMP_VAL___________ |
                           SMP_VAL___________ ),
 
-       [SMP_SRC_TXFIN] = (SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
+       [SMP_SRC_TXFIN] = (SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL_FE_REQ_CNT |
+                          SMP_VAL_FE_HRQ_HDR | SMP_VAL_FE_HRQ_BDY | 
SMP_VAL_FE_SET_BCK |
+                          SMP_VAL_BE_REQ_CNT | SMP_VAL_BE_HRQ_HDR | 
SMP_VAL_BE_HRQ_BDY |
+                          SMP_VAL_BE_SET_SRV | SMP_VAL_BE_SRV_CON | 
SMP_VAL_BE_RES_CNT |
+                          SMP_VAL_BE_HRS_HDR | SMP_VAL_BE_HRS_BDY | 
SMP_VAL_BE_STO_RUL |
+                          SMP_VAL_FE_RES_CNT | SMP_VAL_FE_HRS_HDR | 
SMP_VAL_FE_HRS_BDY |
                           SMP_VAL_FE_LOG_END | SMP_VAL___________ | 
SMP_VAL___________ |
                           SMP_VAL___________ ),
 
-       [SMP_SRC_SSFIN] = (SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
-                          SMP_VAL___________ | SMP_VAL___________ | 
SMP_VAL___________ |
+       [SMP_SRC_SSFIN] = (SMP_VAL_FE_CON_ACC | SMP_VAL_FE_SES_ACC | 
SMP_VAL_FE_REQ_CNT |
+                          SMP_VAL_FE_HRQ_HDR | SMP_VAL_FE_HRQ_BDY | 
SMP_VAL_FE_SET_BCK |
+                          SMP_VAL_BE_REQ_CNT | SMP_VAL_BE_HRQ_HDR | 
SMP_VAL_BE_HRQ_BDY |
+                          SMP_VAL_BE_SET_SRV | SMP_VAL_BE_SRV_CON | 
SMP_VAL_BE_RES_CNT |
+                          SMP_VAL_BE_HRS_HDR | SMP_VAL_BE_HRS_BDY | 
SMP_VAL_BE_STO_RUL |
+                          SMP_VAL_FE_RES_CNT | SMP_VAL_FE_HRS_HDR | 
SMP_VAL_FE_HRS_BDY |
                           SMP_VAL_FE_LOG_END | SMP_VAL___________ | 
SMP_VAL___________ |
                           SMP_VAL___________ ),
 };
@@ -5516,8 +5516,8 @@
 }
 
 static struct sample_fetch_kw_list smp_logs_kws = {ILH, {
-       { "bytes_in",             smp_fetch_bytes,        0,         NULL, 
SMP_T_SINT, SMP_USE_INTRN },
-       { "bytes_out",            smp_fetch_bytes,        0,         NULL, 
SMP_T_SINT, SMP_USE_INTRN },
+       { "bytes_in",             smp_fetch_bytes,        0,         NULL, 
SMP_T_SINT, SMP_USE_RQFIN },
+       { "bytes_out",            smp_fetch_bytes,        0,         NULL, 
SMP_T_SINT, SMP_USE_RSFIN },
 
        { "txn.timer.total",      smp_fetch_txn_timers,   0,         NULL, 
SMP_T_SINT, SMP_USE_TXFIN }, /* "Ta" */
        { "txn.timer.user",       smp_fetch_txn_timers,   0,         NULL, 
SMP_T_SINT, SMP_USE_TXFIN }, /* "Tu" */
@@ -5529,14 +5529,14 @@
        { "fc.timer.handshake",   smp_fetch_conn_timers,  0,         NULL, 
SMP_T_SINT, SMP_USE_L4CLI }, /* "Th" */
        { "fc.timer.total",       smp_fetch_conn_timers,  0,         NULL, 
SMP_T_SINT, SMP_USE_SSFIN }, /* "Tt" */
 
-       { "req.bytes_in",         smp_fetch_bytes,        0,         NULL, 
SMP_T_SINT, SMP_USE_INTRN },
-       { "req.bytes_out",        smp_fetch_bytes,        0,         NULL, 
SMP_T_SINT, SMP_USE_INTRN },
+       { "req.bytes_in",         smp_fetch_bytes,        0,         NULL, 
SMP_T_SINT, SMP_USE_RQFIN },
+       { "req.bytes_out",        smp_fetch_bytes,        0,         NULL, 
SMP_T_SINT, SMP_USE_RQFIN },
        { "req.timer.idle",       smp_fetch_reX_timers,   0,         NULL, 
SMP_T_SINT, SMP_USE_HRQHV }, /* "Ti" */
        { "req.timer.tq",         smp_fetch_reX_timers,   0,         NULL, 
SMP_T_SINT, SMP_USE_HRQHV }, /* "Tq" */
        { "req.timer.hdr",        smp_fetch_reX_timers,   0,         NULL, 
SMP_T_SINT, SMP_USE_HRQHV }, /* "TR" */
        { "req.timer.queue",      smp_fetch_reX_timers,   0,         NULL, 
SMP_T_SINT, SMP_USE_L4SRV }, /* "Tw" */
-       { "res.bytes_in",         smp_fetch_bytes,        0,         NULL, 
SMP_T_SINT, SMP_USE_INTRN },
-       { "res.bytes_out",        smp_fetch_bytes,        0,         NULL, 
SMP_T_SINT, SMP_USE_INTRN },
+       { "res.bytes_in",         smp_fetch_bytes,        0,         NULL, 
SMP_T_SINT, SMP_USE_RSFIN },
+       { "res.bytes_out",        smp_fetch_bytes,        0,         NULL, 
SMP_T_SINT, SMP_USE_RSFIN },
        { "res.timer.data",       smp_fetch_reX_timers,   0,         NULL, 
SMP_T_SINT, SMP_USE_RSFIN }, /* "Td" */
        { "res.timer.hdr",        smp_fetch_reX_timers,   0,         NULL, 
SMP_T_SINT, SMP_USE_HRSHV }, /* "Tr" */
        { /* END */ },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/src/server.c 
new/haproxy-3.3.7+git0.a32bce2da/src/server.c
--- old/haproxy-3.3.6+git91.af5637e93/src/server.c      2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/src/server.c       2026-04-23 
21:32:22.000000000 +0200
@@ -6265,6 +6265,7 @@
            !srv->sni_expr && !(srv->ssl_ctx.options & SRV_SSL_O_NO_AUTO_SNI)) {
                if (srv_configure_auto_sni(srv, &errcode, &errmsg)) {
                        ha_alert("%s.\n", errmsg);
+                       ha_free(&errmsg);
                        goto out;
                }
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-3.3.6+git91.af5637e93/src/tools.c 
new/haproxy-3.3.7+git0.a32bce2da/src/tools.c
--- old/haproxy-3.3.6+git91.af5637e93/src/tools.c       2026-04-17 
10:06:23.000000000 +0200
+++ new/haproxy-3.3.7+git0.a32bce2da/src/tools.c        2026-04-23 
21:32:22.000000000 +0200
@@ -6085,7 +6085,7 @@
                page += pagesize;
                /* copy and make read-only */
                memcpy(page, ctx.storage, ctx.size);
-               mprotect(page, lib_size, PROT_READ);
+               mprotect(page, new_size, PROT_READ);
                vma_set_name(page, new_size, "archive", "boot-libs");
 
                lib_storage = page;

Reply via email to