From 498d36db3fadd987ec78e5660d15a85452b6e4d4 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Thu, 11 Feb 2021 10:42:41 +0100 Subject: [PATCH] BUG/MINOR: tools: Fix a memory leak on error path in parse_dotted_uints() When an invalid character is found during parsing in parse_dotted_uints() function, the allocated array of uint must be released. This patch fixes a memory leak on error path during the configuration parsing. This patch should fix the issue #1106. It should be backported as far as 2.0. Note that, for 2.1 and 2.0, the function is in src/standard.c (cherry picked from commit 4b524124db9dc6e64b4e0f0882b5fc71d24970e0) Signed-off-by: Christopher Faulet (cherry picked from commit 9027d3a6a34a9254bf4c3d642ac1fa886d5c4f23) Signed-off-by: Christopher Faulet (cherry picked from commit 94556d39f1b6d5e4f4ad8715a7b47104a0c636da) Signed-off-by: Christopher Faulet --- src/standard.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/standard.c b/src/standard.c index 6f8b664..4e67b9d 100644 --- a/src/standard.c +++ b/src/standard.c @@ -4515,8 +4515,10 @@ int parse_dotted_uints(const char *str, unsigned int **nums, size_t *sz) /* Expected characters after having read an uint: '\0' or '.', * if '.', must not be terminal. */ - if (*s != '\0'&& (*s++ != '.' || s == end)) + if (*s != '\0'&& (*s++ != '.' || s == end)) { + free(n); return 0; + } n = my_realloc2(n, (*sz + 1) * sizeof *n); if (!n) -- 1.7.10.4