]> git.kaiwu.me - haproxy.git/commitdiff
BUG/MEDIUM: ssl/ocsp: Set HTTPCLIENT_O_RES_ACCUM option on the http-client
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 16 Sep 2026 07:19:21 +0000 (09:19 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 18 Sep 2026 14:50:30 +0000 (16:50 +0200)
The OCSP update task does not consume the response payload on the fly. It
waits for the end of the response to check and load the OCSP response stored
in the http-client response buffer.

Thus, since commit b24260ec9 ("BUG/MEDIUM: http-client: Only consume input
buffer when hc one is empty"), the http-client applet stops to consume data
as soon as the first part of the payload is stored in its response buffer,
waiting for the caller to consume it. But it never happens. So, when the
OCSP response is not received in one time, the update is stuck till the
server timeout expiration and always fails.

The HTTPCLIENT_O_RES_ACCUM option is now set to instruct the http-client to
continue to fill its response buffer.

This patch depends on :

  * BUG/MEDIUM: http-client: Don't use the httpclient context if it was released
  * MINOR: http-client: Add an option to not stop the reception of the response

It should fix issue #3498. It must be backported as far as 3.3 with commit
b24260ec9.

src/ssl_ocsp.c

index 8079bcb23f021710058e5adcdbcc6f7f3714bb63..fe89d2554b1bace9cdde63c16696e82cceb87a3e 100644 (file)
@@ -1429,6 +1429,11 @@ static struct task *ssl_ocsp_update_responses(struct task *task, void *context,
                        goto leave;
                }
 
+               /* The response payload is not consumed on the fly. It is
+                * retrieved at the end of the response.
+                */
+               hc->options |= HTTPCLIENT_O_RES_ACCUM;
+
                hc->ops.res_stline = ocsp_update_response_stline_cb;
                hc->ops.res_headers = ocsp_update_response_headers_cb;
                hc->ops.res_payload = ocsp_update_response_body_cb;