diff --git a/reg-tests/converter/json.vtc b/reg-tests/converter/json.vtc new file mode 100644 index 0000000000..efac8f6226 --- /dev/null +++ b/reg-tests/converter/json.vtc @@ -0,0 +1,41 @@ +varnishtest "json converter test" + +#REQUIRE_VERSION=1.6 + +feature ignore_unknown_macro + +server s1 { + rxreq + txresp +} -repeat 2 -start + +haproxy h1 -conf { + defaults + mode http + timeout connect 1s + timeout client 1s + timeout server 1s + + frontend fe + bind "fd@${fe}" + + http-response set-header json0 "%[str(foo 1/2),json]" + # bad UTF-8 sequence + http-response set-header json1 "%[str(\xE0),json(utf8)]" + # bad UTF-8 sequence, but removes them + http-response set-header json2 "%[str(-\xE0-),json(utf8s)]" + + default_backend be + + backend be + server s1 ${s1_addr}:${s1_port} +} -start + +client c1 -connect ${h1_fe_sock} { + txreq -url "/" + rxresp + expect resp.http.json0 == "foo 1\\/2" + expect resp.http.json1 == "" + expect resp.http.json2 == "--" + expect resp.status == 200 +} -run diff --git a/src/sample.c b/src/sample.c index 41d95d86c2..fa854632f4 100644 --- a/src/sample.c +++ b/src/sample.c @@ -2152,21 +2152,12 @@ enum input_type { IT_UTF8P, IT_UTF8PS, }; + static int sample_conv_json_check(struct arg *arg, struct sample_conv *conv, const char *file, int line, char **err) { enum input_type type; - if (!arg) { - memprintf(err, "Unexpected empty arg list"); - return 0; - } - - if (arg->type != ARGT_STR) { - memprintf(err, "Unexpected arg type"); - return 0; - } - if (strcmp(arg->data.str.area, "") == 0) type = IT_ASCII; else if (strcmp(arg->data.str.area, "ascii") == 0)