]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: cache: Check the return value of http_replace_res_status
authorTim Duesterhus <tim@bastelstu.be>
Thu, 22 Oct 2020 19:15:06 +0000 (21:15 +0200)
committerWilliam Lallemand <wlallemand@haproxy.org>
Tue, 27 Oct 2020 16:01:49 +0000 (17:01 +0100)
Send the full body if the status `304` cannot be applied. This should be the
most graceful failure.

Specific for 2.3, no backport needed.

src/cache.c

index a5e26c330d539333a9b4742070d9279c605c18f3..c8350ff00704283c5fb4b13608178c22e35224d0 100644 (file)
@@ -935,8 +935,12 @@ static void http_cache_io_handler(struct appctx *appctx)
 
                /* In case of a conditional request, we might want to send a
                 * "304 Not Modified" response instead of the stored data. */
-               if (appctx->ctx.cache.send_notmodified)
-                       http_replace_res_status(res_htx, ist("304"), ist("Not Modified"));
+               if (appctx->ctx.cache.send_notmodified) {
+                       if (!http_replace_res_status(res_htx, ist("304"), ist("Not Modified"))) {
+                               /* If replacing the status code fails we need to send the full response. */
+                               appctx->ctx.cache.send_notmodified = 0;
+                       }
+               }
 
                /* Skip response body for HEAD requests or in case of "304 Not
                 * Modified" response. */