From: Tim Duesterhus Date: Wed, 16 Oct 2019 13:11:15 +0000 (+0200) Subject: BUG/MINOR: sample: Make the `field` converter compatible with `-m found` X-Git-Tag: v2.1-dev3~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4381d26edc03faa46401eb0fe82fd7be84be14fd;p=thirdparty%2Fhaproxy.git BUG/MINOR: sample: Make the `field` converter compatible with `-m found` Previously an expression like: path,field(2,/) -m found always returned `true`. Bug exists since the `field` converter exists. That is: f399b0debfc6c7dc17c6ad503885c911493add56 The fix should be backported to 1.6+. --- diff --git a/reg-tests/converter/field.vtc b/reg-tests/converter/field.vtc new file mode 100644 index 0000000000..29608fe5bd --- /dev/null +++ b/reg-tests/converter/field.vtc @@ -0,0 +1,39 @@ +varnishtest "field converter Test" + +feature ignore_unknown_macro + +server s1 { + rxreq + txresp +} -repeat 3 -start + +haproxy h1 -conf { + defaults + mode http + timeout connect 1s + timeout client 1s + timeout server 1s + + frontend fe + bind "fd@${fe}" + + #### requests + http-request set-var(txn.uri) path + http-response set-header Found %[var(txn.uri),field(3,/)] if { var(txn.uri),field(3,/) -m found } + + default_backend be + + backend be + server s1 ${s1_addr}:${s1_port} +} -start + +client c1 -connect ${h1_fe_sock} { + txreq -url "/foo/bar/baz" + rxresp + expect resp.status == 200 + expect resp.http.found == "bar" + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.http.found == "" +} -run diff --git a/src/sample.c b/src/sample.c index e2d96904e7..98b5d573fc 100644 --- a/src/sample.c +++ b/src/sample.c @@ -2137,7 +2137,7 @@ static int sample_conv_field(const struct arg *arg_p, struct sample *smp, void * /* Field not found */ if (field != arg_p[0].data.sint) { smp->data.u.str.data = 0; - return 1; + return 0; } found: smp->data.u.str.data = end - start;