mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-29 14:50:59 +01:00
MEDIUM: pattern: ensure that sample types always cast into other types.
We want to ensure that a dynamically returned type will always have a cast before calling the cast function. This is done in pattern_process() and in stktable_fetch_key().
This commit is contained in:
parent
25c1ebc0c9
commit
12e5011a76
@ -487,9 +487,21 @@ struct sample *pattern_process(struct proxy *px, struct session *l4, void *l7,
|
||||
return NULL;
|
||||
|
||||
list_for_each_entry(conv_expr, &expr->conv_exprs, list) {
|
||||
if (!pattern_casts[p->type][conv_expr->conv->in_type](p))
|
||||
/* we want to ensure that p->type can be casted into
|
||||
* conv_expr->conv->in_type. We have 3 possibilities :
|
||||
* - NULL => not castable.
|
||||
* - c_none => nothing to do (let's optimize it)
|
||||
* - other => apply cast and prepare to fail
|
||||
*/
|
||||
if (!pattern_casts[p->type][conv_expr->conv->in_type])
|
||||
return NULL;
|
||||
|
||||
if (pattern_casts[p->type][conv_expr->conv->in_type] != c_none &&
|
||||
!pattern_casts[p->type][conv_expr->conv->in_type](p))
|
||||
return NULL;
|
||||
|
||||
/* OK cast succeeded */
|
||||
|
||||
/* force the output type after a cast */
|
||||
p->type = conv_expr->conv->in_type;
|
||||
if (!conv_expr->conv->process(conv_expr->arg_p, p))
|
||||
|
||||
@ -600,6 +600,9 @@ struct stktable_key *stktable_fetch_key(struct stktable *t, struct proxy *px, st
|
||||
if (!smp)
|
||||
return NULL;
|
||||
|
||||
if (!pattern_to_key[smp->type][t->type])
|
||||
return NULL;
|
||||
|
||||
static_table_key.key_len = t->key_size;
|
||||
static_table_key.key = pattern_to_key[smp->type][t->type](smp, &static_table_key.data, &static_table_key.key_len);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user