]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: http-htx: check the strdup() of the "lf-string" http reply argument
authorWilly Tarreau <w@1wt.eu>
Mon, 27 Jul 2026 10:16:30 +0000 (12:16 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 27 Jul 2026 13:49:21 +0000 (15:49 +0200)
In http_parse_http_reply(), the "lf-string" argument copies its value with
strdup() without checking the result:

obj = strdup(args[cur_arg]);
objlen = strlen(args[cur_arg]);
reply->type = HTTP_REPLY_LOGFMT;

while every sibling argument does check it ("string", and "lf-file" through its
combined "!obj || read(...)" test). <obj> is later handed over to
parse_logformat_string(), which starts with "lf_expr->str = strdup(fmt)", so a
NULL would be passed to strdup() and dereferenced.

This only happens if an allocation fails while parsing the configuration, so the
impact is limited, but the check is missing where all the others are present.

This should be backported to all supported versions.

src/http_htx.c

index 2bae91c4a8bde1cd4dda9452b24aea4613f13f66..f199265b7a88babfabdb743e51eadf09656748b0 100644 (file)
@@ -1698,6 +1698,10 @@ struct http_reply *http_parse_http_reply(const char **args, int *orig_arg, struc
                                goto error;
                        }
                        obj = strdup(args[cur_arg]);
+                       if (!obj) {
+                               memprintf(errmsg, "out of memory");
+                               goto error;
+                       }
                        objlen = strlen(args[cur_arg]);
                        reply->type = HTTP_REPLY_LOGFMT;
                        lf_expr_init(&reply->body.fmt);