mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-31 14:11:54 +00:00
Filter: Fixed segfault when a case option had an empty block
Thanks to Kobayashi_Bairuo <noc@tohunet.com> for reporting.
This commit is contained in:
parent
ac7341a181
commit
1499a335f6
@ -200,7 +200,7 @@ FID_INTERPRET_BODY()')
|
|||||||
# Executing another filter line. This replaces the recursion
|
# Executing another filter line. This replaces the recursion
|
||||||
# that was needed in the former implementation.
|
# that was needed in the former implementation.
|
||||||
m4_define(LINEX, `FID_INTERPRET_EXEC()LINEX_($1)FID_INTERPRET_NEW()return $1 FID_INTERPRET_BODY()')
|
m4_define(LINEX, `FID_INTERPRET_EXEC()LINEX_($1)FID_INTERPRET_NEW()return $1 FID_INTERPRET_BODY()')
|
||||||
m4_define(LINEX_, `do {
|
m4_define(LINEX_, `do if ($1) {
|
||||||
fstk->estk[fstk->ecnt].pos = 0;
|
fstk->estk[fstk->ecnt].pos = 0;
|
||||||
fstk->estk[fstk->ecnt].line = $1;
|
fstk->estk[fstk->ecnt].line = $1;
|
||||||
fstk->estk[fstk->ecnt].ventry = fstk->vcnt;
|
fstk->estk[fstk->ecnt].ventry = fstk->vcnt;
|
||||||
@ -227,9 +227,7 @@ if (!f_same(f1->fl$1, f2->fl$1)) return 0;
|
|||||||
FID_ITERATE_BODY()m4_dnl
|
FID_ITERATE_BODY()m4_dnl
|
||||||
if (whati->fl$1) BUFFER_PUSH(fit->lines) = whati->fl$1;
|
if (whati->fl$1) BUFFER_PUSH(fit->lines) = whati->fl$1;
|
||||||
FID_INTERPRET_EXEC()m4_dnl
|
FID_INTERPRET_EXEC()m4_dnl
|
||||||
do { if (whati->fl$1) {
|
LINEX_(whati->fl$1)
|
||||||
LINEX_(whati->fl$1);
|
|
||||||
} } while(0)
|
|
||||||
FID_INTERPRET_NEW()m4_dnl
|
FID_INTERPRET_NEW()m4_dnl
|
||||||
return whati->f$1
|
return whati->f$1
|
||||||
FID_INTERPRET_BODY()')
|
FID_INTERPRET_BODY()')
|
||||||
|
@ -1327,7 +1327,6 @@
|
|||||||
FID_HIC(,break,return NULL);
|
FID_HIC(,break,return NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* It is actually possible to have t->data NULL */
|
|
||||||
|
|
||||||
LINEX(t->data);
|
LINEX(t->data);
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,18 @@ bt_test_same(onef, onef, 1);
|
|||||||
bt_test_same(onef, oneg, 1);
|
bt_test_same(onef, oneg, 1);
|
||||||
bt_test_same(onef, twof, 0);
|
bt_test_same(onef, twof, 0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Testing filter corner cases
|
||||||
|
* ---------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
function t_nothing() {}
|
||||||
|
bt_test_suite(t_nothing, "Testing nothing");
|
||||||
|
|
||||||
|
function t_metanothing() { t_nothing(); }
|
||||||
|
bt_test_suite(t_metanothing, "Testing meta nothing");
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Testing boolean expressions
|
* Testing boolean expressions
|
||||||
* ---------------------------
|
* ---------------------------
|
||||||
@ -76,6 +88,14 @@ bt_test_suite(t_bool, "Testing boolean expressions");
|
|||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
function aux_t_int(int t; int u)
|
||||||
|
{
|
||||||
|
case t {
|
||||||
|
1: {}
|
||||||
|
else: {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
define four = 4;
|
define four = 4;
|
||||||
define xyzzy = (120+10);
|
define xyzzy = (120+10);
|
||||||
define '1a-a1' = (xyzzy-100);
|
define '1a-a1' = (xyzzy-100);
|
||||||
@ -120,7 +140,10 @@ function t_int()
|
|||||||
else: bt_assert(false);
|
else: bt_assert(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
aux_t_int(1, 2);
|
||||||
|
aux_t_int(1, 3);
|
||||||
|
aux_t_int(2, 3);
|
||||||
|
aux_t_int(2, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
bt_test_suite(t_int, "Testing integers");
|
bt_test_suite(t_int, "Testing integers");
|
||||||
|
Loading…
Reference in New Issue
Block a user