From: Christopher Faulet Date: Tue, 14 Jan 2020 14:05:56 +0000 (+0100) Subject: BUG/MINOR: tcp-rules: Fix memory releases on error path during action parsing X-Git-Tag: v2.2-dev1~31 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fdb6fbfa9a7b730939865b79bfbca3af278113b8;p=thirdparty%2Fhaproxy.git BUG/MINOR: tcp-rules: Fix memory releases on error path during action parsing When an error occurred during the parsing of a TCP action, if some memory was allocated, it should be released before exiting. Here, the fix consists for replace a call to free() on a sample expression by a call to release_sample_expr(). This patch may be backported to all supported versions. --- diff --git a/src/tcp_rules.c b/src/tcp_rules.c index 25cc3fbdc4..aa713c59e0 100644 --- a/src/tcp_rules.c +++ b/src/tcp_rules.c @@ -770,7 +770,7 @@ static int tcp_parse_request_rule(char **args, int arg, int section_type, memprintf(err, "'%s %s %s' : fetch method '%s' extracts information from '%s', none of which is available here", args[0], args[1], args[kw], args[arg-1], sample_src_names(expr->fetch->use)); - free(expr); + release_sample_expr(expr); return -1; } @@ -780,7 +780,7 @@ static int tcp_parse_request_rule(char **args, int arg, int section_type, memprintf(err, "'%s %s %s' : missing length value", args[0], args[1], args[kw]); - free(expr); + release_sample_expr(expr); return -1; } /* we copy the table name for now, it will be resolved later */ @@ -789,7 +789,7 @@ static int tcp_parse_request_rule(char **args, int arg, int section_type, memprintf(err, "'%s %s %s' : length must be > 0", args[0], args[1], args[kw]); - free(expr); + release_sample_expr(expr); return -1; } arg++; @@ -851,7 +851,7 @@ static int tcp_parse_request_rule(char **args, int arg, int section_type, memprintf(err, "'%s %s %s' : fetch method '%s' extracts information from '%s', none of which is available here", args[0], args[1], args[kw], args[arg-1], sample_src_names(expr->fetch->use)); - free(expr); + release_sample_expr(expr); return -1; } @@ -864,7 +864,7 @@ static int tcp_parse_request_rule(char **args, int arg, int section_type, memprintf(err, "'%s %s %s' : missing table name", args[0], args[1], args[kw]); - free(expr); + release_sample_expr(expr); return -1; } /* we copy the table name for now, it will be resolved later */