mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-17 08:38:42 +00:00
Filter: Don't fail badly when trying to access non-existent route in config time
This commit is contained in:
parent
bfa15a642f
commit
547be53b8c
@ -189,7 +189,7 @@ m4_define(SYMBOL, `FID_MEMBER(struct symbol *, sym, [[strcmp(f1->sym->name, f2->
|
|||||||
m4_define(RTC, `FID_MEMBER(struct rtable_config *, rtc, [[strcmp(f1->rtc->name, f2->rtc->name)]], route table %s, item->rtc->name)')
|
m4_define(RTC, `FID_MEMBER(struct rtable_config *, rtc, [[strcmp(f1->rtc->name, f2->rtc->name)]], route table %s, item->rtc->name)')
|
||||||
m4_define(STATIC_ATTR, `FID_MEMBER(struct f_static_attr, sa, f1->sa.sa_code != f2->sa.sa_code,,)')
|
m4_define(STATIC_ATTR, `FID_MEMBER(struct f_static_attr, sa, f1->sa.sa_code != f2->sa.sa_code,,)')
|
||||||
m4_define(DYNAMIC_ATTR, `FID_MEMBER(struct f_dynamic_attr, da, f1->da.ea_code != f2->da.ea_code,,)')
|
m4_define(DYNAMIC_ATTR, `FID_MEMBER(struct f_dynamic_attr, da, f1->da.ea_code != f2->da.ea_code,,)')
|
||||||
m4_define(ACCESS_RTE, `NEVER_CONSTANT()')
|
m4_define(ACCESS_RTE, `FID_HIC(,[[do { if (!fs->rte) runtime("No route to access"); } while (0)]],NEVER_CONSTANT())')
|
||||||
|
|
||||||
# 2) Code wrapping
|
# 2) Code wrapping
|
||||||
# The code produced in 1xx temporary diversions is a raw code without
|
# The code produced in 1xx temporary diversions is a raw code without
|
||||||
|
@ -210,7 +210,6 @@ interpret(struct filter_state *fs, const struct f_line *line, struct f_val *val)
|
|||||||
#define falloc(size) lp_alloc(fs->pool, size)
|
#define falloc(size) lp_alloc(fs->pool, size)
|
||||||
#define fpool fs->pool
|
#define fpool fs->pool
|
||||||
|
|
||||||
#define ACCESS_RTE do { if (!fs->rte) runtime("No route to access"); } while (0)
|
|
||||||
#define ACCESS_EATTRS do { if (!fs->eattrs) f_cache_eattrs(fs); } while (0)
|
#define ACCESS_EATTRS do { if (!fs->eattrs) f_cache_eattrs(fs); } while (0)
|
||||||
|
|
||||||
#include "filter/inst-interpret.c"
|
#include "filter/inst-interpret.c"
|
||||||
@ -221,7 +220,6 @@ interpret(struct filter_state *fs, const struct f_line *line, struct f_val *val)
|
|||||||
#undef runtime
|
#undef runtime
|
||||||
#undef falloc
|
#undef falloc
|
||||||
#undef fpool
|
#undef fpool
|
||||||
#undef ACCESS_RTE
|
|
||||||
#undef ACCESS_EATTRS
|
#undef ACCESS_EATTRS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -400,7 +398,7 @@ f_eval_int(const struct f_line *expr)
|
|||||||
LOG_BUFFER_INIT(filter_state.buf);
|
LOG_BUFFER_INIT(filter_state.buf);
|
||||||
|
|
||||||
if (interpret(&filter_state, expr, &val) > F_RETURN)
|
if (interpret(&filter_state, expr, &val) > F_RETURN)
|
||||||
cf_error("Runtime error while evaluating expression");
|
cf_error("Runtime error while evaluating expression; see log for details");
|
||||||
|
|
||||||
if (val.type != T_INT)
|
if (val.type != T_INT)
|
||||||
cf_error("Integer expression expected");
|
cf_error("Integer expression expected");
|
||||||
|
Loading…
Reference in New Issue
Block a user