diff --git a/reg-tests/stick-table/h00000.vtc b/reg-tests/stick-table/h00000.vtc new file mode 100644 index 000000000..1071bc04f --- /dev/null +++ b/reg-tests/stick-table/h00000.vtc @@ -0,0 +1,30 @@ +# Shipped with the commit fixing the bug. + +varnishtest "Stick Table: Crash when accessing unknown key." +feature ignore_unknown_macro + +server s0 { + rxreq + txresp +} -start + +haproxy h0 -conf { + defaults + timeout connect 5000ms + timeout client 50000ms + timeout server 50000ms + + frontend test + mode http + bind "fd@${fe1}" + stick-table type ip size 1m expire 1h store gpc0 + http-request deny if { src,table_trackers(test) eq 1 } + http-request deny if { src,in_table(test) } + http-request deny deny_status 200 +} -start + +client c0 -connect ${h0_fe1_sock} { + txreq -url "/" + rxresp + expect resp.status == 200 +} -run diff --git a/src/stick_table.c b/src/stick_table.c index 429465455..8e16830d0 100644 --- a/src/stick_table.c +++ b/src/stick_table.c @@ -1596,8 +1596,10 @@ static int sample_conv_table_trackers(const struct arg *arg_p, struct sample *sm smp->data.type = SMP_T_SINT; smp->data.u.sint = 0; - if (ts) - smp->data.u.sint = ts->ref_cnt; + if (!ts) + return 1; + + smp->data.u.sint = ts->ref_cnt; stktable_release(t, ts); return 1;