BUG/MINOR: vars: make smp_fetch_var() more robust against misuses

smp_fetch_var() may be called from everywhere since it just reads a
variable. It must ensure that the stream exists before trying to return
a stream-dependant variable. For now there is no impact but it will
cause trouble with tcp-request session rules.
This commit is contained in:
Willy Tarreau 2016-10-21 17:14:35 +02:00
parent 108a8fd8be
commit 7513d001c8

View File

@ -242,11 +242,21 @@ static int smp_fetch_var(const struct arg *args, struct sample *smp, const char
/* Check the availibity of the variable. */
switch (var_desc->scope) {
case SCOPE_SESS: vars = &smp->sess->vars; break;
case SCOPE_TXN: vars = &smp->strm->vars_txn; break;
case SCOPE_SESS:
vars = &smp->sess->vars;
break;
case SCOPE_TXN:
if (!smp->strm)
return 0;
vars = &smp->strm->vars_txn;
break;
case SCOPE_REQ:
case SCOPE_RES:
default: vars = &smp->strm->vars_reqres; break;
default:
if (!smp->strm)
return 0;
vars = &smp->strm->vars_reqres;
break;
}
if (vars->scope != var_desc->scope)
return 0;