From 31e91e5929fbb3b12171ad91fca72d217ad6ad9b Mon Sep 17 00:00:00 2001 From: Jerome Magnin Date: Fri, 21 Feb 2020 10:37:48 +0100 Subject: [PATCH] BUG/MINOR: http: http-request replace-path duplicates the query string In http_action_replace_uri() we call http_get_path() in the case of a replace-path rule. http_get_path() will return an ist pointing to the start of the path, but uri.ptr + uri.len points to the end of the uri. As as result, we are matching against a string containing the query, which we append to the "path" later, effectively duplicating the query string. This patch uses the iststop() function introduced in "MINOR: ist: add an iststop() function" to find the '?' character and update the ist length when needed. This fixes issue #510. The bug was introduced by commit 262c3f1a ("MINOR: http: add a new "replace-path" action"), which was backported to 2.1 and 2.0. (cherry picked from commit 4bbc9494b75b6f987c813546c1fa79a5e883a188) Signed-off-by: Christopher Faulet --- src/http_act.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/http_act.c b/src/http_act.c index 8ff8e88..e884b47 100644 --- a/src/http_act.c +++ b/src/http_act.c @@ -153,7 +153,7 @@ static enum act_return http_action_replace_uri(struct act_rule *rule, struct pro uri = htx_sl_req_uri(http_get_stline(htxbuf(&s->req.buf))); if (rule->arg.act.p[0] == (void *)1) - uri = http_get_path(uri); // replace path + uri = iststop(http_get_path(uri), '?'); if (!regex_exec_match2(rule->arg.act.p[1], uri.ptr, uri.len, MAX_MATCH, pmatch, 0)) goto leave; -- 1.7.10.4