Skip to content
Snippets Groups Projects
Commit 452e90ba authored by Ondřej Zajíček's avatar Ondřej Zajíček
Browse files

Filter: Fix crash with 'where' filters and function calls

The old 'where' code computed size value incorrectly, which leads
to invalid instruction lines and filter errors or crashes.
parent 1127887a
Branches
Tags
No related merge requests found
Pipeline #52421 passed with warnings with stages
in 5 minutes and 2 seconds
......@@ -32,33 +32,12 @@ filter_name(const struct filter *filter)
struct filter *f_new_where(struct f_inst *where)
{
struct f_inst acc = {
.fi_code = FI_DIE,
.lineno = ifs->lino,
.size = 1,
.i_FI_DIE = { .fret = F_ACCEPT, },
};
struct f_inst rej = {
.fi_code = FI_DIE,
.lineno = ifs->lino,
.size = 1,
.i_FI_DIE = { .fret = F_REJECT, },
};
struct f_inst i = {
.fi_code = FI_CONDITION,
.lineno = ifs->lino,
.size = 3 + where->size,
.i_FI_CONDITION = {
.f1 = where,
.f2 = &acc,
.f3 = &rej,
},
};
struct f_inst *cond = f_new_inst(FI_CONDITION, where,
f_new_inst(FI_DIE, F_ACCEPT),
f_new_inst(FI_DIE, F_REJECT));
struct filter *f = cfg_allocz(sizeof(struct filter));
f->root = f_linearize(&i);
f->root = f_linearize(cond);
return f;
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment