aboutsummaryrefslogtreecommitdiff
path: root/net/haproxy/patches/032-BUG-MINOR-tcp-rules-Fix-memory-releases-on-error-path-during-action-parsing.patch
blob: 87bcafa1b7262065bb8d61bba2a5cb5e0c8e16be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
commit 630583cc735de8036ca9963a6e093d5fef90157e
Author: Christopher Faulet <cfaulet@haproxy.com>
Date:   Tue Jan 14 15:05:56 2020 +0100

    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.
    
    (cherry picked from commit fdb6fbfa9a7b730939865b79bfbca3af278113b8)
    Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>

diff --git a/src/tcp_rules.c b/src/tcp_rules.c
index 86b4df538..27cc0c20b 100644
--- a/src/tcp_rules.c
+++ b/src/tcp_rules.c
@@ -694,7 +694,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;
 		}
 
@@ -704,7 +704,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 */
@@ -713,7 +713,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++;
@@ -772,7 +772,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;
 		}
 
@@ -785,7 +785,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 */