mirror of
https://github.com/zeek/zeek.git
synced 2025-10-07 09:08:20 +00:00
Change the way the input framework deals with values it cannot convert
into BroVals (especially enums) Not we do not force an internal error anymore. Instead, we raise an normal error and set an error flag that signals to the top-level functions that the value could not be converted and should not be propagated to the Bro core. This sadly makes the already messy code even more messy - but since errors can happen in deeply nested data structures, the alternative (catching the error at every possible location and then trying to clean up there instead of recursively deleting the data that cannot be used later) is much worse. Addresses BIT-1199
This commit is contained in:
parent
d236643894
commit
c27848fc32
5 changed files with 248 additions and 119 deletions
37
testing/btest/scripts/base/frameworks/input/missing-enum.bro
Normal file
37
testing/btest/scripts/base/frameworks/input/missing-enum.bro
Normal file
|
@ -0,0 +1,37 @@
|
|||
# @TEST-EXEC: btest-bg-run bro bro -b %INPUT
|
||||
# @TEST-EXEC: btest-bg-wait 10
|
||||
# @TEST-EXEC: btest-diff bro/.stderr
|
||||
# @TEST-EXEC: btest-diff bro/.stdout
|
||||
|
||||
@TEST-START-FILE input.log
|
||||
#fields e i
|
||||
IdoNot::Exist 1
|
||||
@TEST-END-FILE
|
||||
|
||||
redef exit_only_after_terminate = T;
|
||||
|
||||
module A;
|
||||
|
||||
type Idx: record {
|
||||
i: int;
|
||||
};
|
||||
|
||||
type Val: record {
|
||||
e: Log::ID;
|
||||
};
|
||||
|
||||
global etable: table[int] of Log::ID = table();
|
||||
|
||||
event bro_init()
|
||||
{
|
||||
# first read in the old stuff into the table...
|
||||
Input::add_table([$source="../input.log", $name="enum", $idx=Idx, $val=Val, $destination=etable, $want_record=F]);
|
||||
}
|
||||
|
||||
event Input::end_of_data(name: string, source:string)
|
||||
{
|
||||
print "Table:";
|
||||
print etable;
|
||||
Input::remove("enum");
|
||||
terminate();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue