mirror of
https://github.com/zeek/zeek.git
synced 2025-10-10 18:48:20 +00:00
Merge remote-tracking branch 'origin/topic/jsiwek/ticket-932'
* origin/topic/jsiwek/ticket-932: Fix uninitialized locals in event/hook handlers from having a value. Closes #932.
This commit is contained in:
commit
c780bfdb48
4 changed files with 38 additions and 8 deletions
16
src/Stmt.cc
16
src/Stmt.cc
|
@ -1853,13 +1853,21 @@ Val* InitStmt::Exec(Frame* f, stmt_flow_type& flow) const
|
||||||
ID* aggr = (*inits)[i];
|
ID* aggr = (*inits)[i];
|
||||||
BroType* t = aggr->Type();
|
BroType* t = aggr->Type();
|
||||||
|
|
||||||
Val* v;
|
Val* v = 0;
|
||||||
if ( t->Tag() == TYPE_RECORD )
|
|
||||||
|
switch ( t->Tag() ) {
|
||||||
|
case TYPE_RECORD:
|
||||||
v = new RecordVal(t->AsRecordType());
|
v = new RecordVal(t->AsRecordType());
|
||||||
else if ( aggr->Type()->Tag() == TYPE_VECTOR )
|
break;
|
||||||
|
case TYPE_VECTOR:
|
||||||
v = new VectorVal(t->AsVectorType());
|
v = new VectorVal(t->AsVectorType());
|
||||||
else
|
break;
|
||||||
|
case TYPE_TABLE:
|
||||||
v = new TableVal(t->AsTableType(), aggr->Attrs());
|
v = new TableVal(t->AsTableType(), aggr->Attrs());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
f->SetElement(aggr->Offset(), v);
|
f->SetElement(aggr->Offset(), v);
|
||||||
}
|
}
|
||||||
|
|
|
@ -243,10 +243,7 @@ Stmt* add_local(ID* id, BroType* t, init_class c, Expr* init,
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( t->Tag() == TYPE_RECORD || t->Tag() == TYPE_TABLE ||
|
current_scope()->AddInit(id);
|
||||||
t->Tag() == TYPE_VECTOR )
|
|
||||||
current_scope()->AddInit(id);
|
|
||||||
|
|
||||||
return new NullStmt;
|
return new NullStmt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
2
testing/btest/Baseline/language.uninitialized-local/out
Normal file
2
testing/btest/Baseline/language.uninitialized-local/out
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
error in /Users/jsiwek/Projects/bro/bro/testing/btest/.tmp/language.uninitialized-local/uninitialized-local.bro, line 16: value used but not set (my_string)
|
||||||
|
Continuing
|
23
testing/btest/language/uninitialized-local.bro
Normal file
23
testing/btest/language/uninitialized-local.bro
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# @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();
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue