mirror of
https://github.com/zeek/zeek.git
synced 2025-10-06 00:28:21 +00:00

Since values for local variables are referenced by offset within a Frame (not by identifier name), and event/hook handler bodies share a common Frame, the value offsets for local variables in different handlers may overlap. This meant locals in a handler without an initialization may actually end up referring to the value of a previous handler's local that has the same Frame offset. When executing the body, that can possibly result in a type-conflict error or give give unexpected results instead of a "use of uninitialized value" error. This patch makes it so uninitialized locals do always refer to a null value before executing the body of a event/hook handler, so that using them without assigning a value within the body will connsistently give a "use of uninitialized value" error. Addresses #932.
23 lines
577 B
Text
23 lines
577 B
Text
# @TEST-EXEC: bro -b %INPUT >out 2>&1
|
|
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out
|
|
|
|
event testit() &priority=10
|
|
{
|
|
local my_count: count = 10;
|
|
}
|
|
|
|
event testit()
|
|
{
|
|
# my_string's value occupies same Frame offset as my_count's from above
|
|
# handler, but execution of this handler body should still "initialize"
|
|
# it to a null value instead of referring to a left-over value of my_count.
|
|
local my_string: string;
|
|
local my_vector: vector of string;
|
|
my_vector[0] = my_string;
|
|
print "Continuing";
|
|
}
|
|
|
|
event bro_init()
|
|
{
|
|
event testit();
|
|
}
|