BUG/MINOR: log: fix potential memory leak upon error in add_to_logformat_list()
authorAurelien DARRAGON <adarragon@haproxy.com>
Thu, 4 Sep 2025 08:26:37 +0000 (10:26 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 1 Oct 2025 14:48:34 +0000 (16:48 +0200)
As reported on GH #3099, upon memory error add_to_logformat_list() will
return and error but it fails to properly memory which was allocated
within the function, which could result in memory leak.

Let's free all relevant variables allocated by the function before returning.

No backport needed unless 22ac1f5ee ("("BUG/MINOR: log: Add OOM checks for
calloc() and malloc() in logformat parser and dup_logger()") is.

(cherry picked from commit c97ced3f938271c9d648594d6c4bfcd194c36a7d)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit 5d0cd28ce889a85fb4ef8d1617f8f61abd1ebea7)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit 9ac6454aa1ebcb813f61f7b4fb6ac07dbb21d7ec)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>

src/log.c

index 3c50379..90eabb2 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -496,6 +496,8 @@ int add_to_logformat_list(char *start, char *end, int type, struct lf_expr *lf_e
                struct logformat_node *node = calloc(1, sizeof(*node));
                str = calloc(1, end - start + 1);
                if (unlikely(!node || !str)) {
+                       free(node);
+                       free(str);
                        memprintf(err, "out of memory error");
                        return 0;
                }