]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: tcp-rules: Fix memory releases on error path during action parsing
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 14 Jan 2020 14:05:56 +0000 (15:05 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 20 Jan 2020 14:18:45 +0000 (15:18 +0100)
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.

src/tcp_rules.c

index 25cc3fbdc4cc169c406d0568241010b80867b302..aa713c59e016c453f68db5ce8af228e2970242f2 100644 (file)
@@ -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 */