]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: http: Return an error when url_dec sample converter failed
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 5 Oct 2017 08:03:12 +0000 (10:03 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 5 Oct 2017 09:11:34 +0000 (11:11 +0200)
url_dec sample converter uses url_decode function to decode an URL. This
function fails by returning -1 when an invalid character is found. But the
sample converter never checked the return value and it used it as length for the
decoded string. Because it always succeeded, the invalid sample (with a string
length set to -1) could be used by other sample fetches or sample converters,
leading to undefined behavior like segfault.

The fix is pretty simple, url_dec sample converter just needs to return an error
when url_decode fails.

This patch must be backported in 1.7 and 1.6.

src/proto_http.c

index fb5c0858e26ac3759dd8c0af383d66c54b147219..e6107ee23378f288e5dbf2bf33649b8de905d43f 100644 (file)
@@ -12414,7 +12414,7 @@ static int sample_conv_url_dec(const struct arg *args, struct sample *smp, void
        /* Add final \0 required by url_decode(), and convert the input string. */
        smp->data.u.str.str[smp->data.u.str.len] = '\0';
        smp->data.u.str.len = url_decode(smp->data.u.str.str);
-       return 1;
+       return (smp->data.u.str.len >= 0);
 }
 
 static int smp_conv_req_capture(const struct arg *args, struct sample *smp, void *private)