]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: pattern: a sample marked as const could be written
authorThierry Fournier <thierry.fournier@ozon.io>
Tue, 10 Nov 2020 19:51:36 +0000 (20:51 +0100)
committerWilly Tarreau <w@1wt.eu>
Wed, 11 Nov 2020 09:43:15 +0000 (10:43 +0100)
The functions add final 0 to string if the final 0 is not set,
but don't check the flag CONST. This patch duplicates the strings
if the final zero is not set and the string is CONST.

Should be backported until 2.2 (at least)

src/pattern.c

index 88e760cc052f70514d00e5b3f289577c7aadd5fe..e62d0d05f8944c7e8893010c8d83e37b723009e2 100644 (file)
@@ -448,11 +448,18 @@ struct pattern *pat_match_str(struct sample *smp, struct pattern_expr *expr, int
 
                if (smp->data.u.str.data < smp->data.u.str.size) {
                        /* we may have to force a trailing zero on the test pattern and
-                        * the buffer is large enough to accommodate it.
+                        * the buffer is large enough to accommodate it. If the flag
+                        * CONST is set, duplicate the string
                         */
                        prev = smp->data.u.str.area[smp->data.u.str.data];
-                       if (prev)
-                               smp->data.u.str.area[smp->data.u.str.data] = '\0';
+                       if (prev) {
+                               if (smp->flags & SMP_F_CONST) {
+                                       if (!smp_dup(smp))
+                                               return NULL;
+                               } else {
+                                       smp->data.u.str.area[smp->data.u.str.data] = '\0';
+                               }
+                       }
                }
                else {
                        /* Otherwise, the sample is duplicated. A trailing zero