Merge remote-tracking branch 'origin/topic/timw/1740-table-key-error'

* origin/topic/timw/1740-table-key-error:
  GH-1741: Print error if calling a non-hook with hook keyword
  GH-1740: Report a better error message if table key is not a list
This commit is contained in:
Tim Wojtulewicz 2021-12-10 09:28:23 -07:00
commit 7a6a81c200
6 changed files with 31 additions and 11 deletions

View file

@ -1,3 +1,9 @@
4.2.0-dev.432 | 2021-12-10 09:28:23 -0700
* GH-1741: Print error if calling a non-hook with hook keyword (Tim Wojtulewicz, Corelight)
* GH-1740: Report a better error message if table key is not a list (Tim Wojtulewicz, Corelight)
4.2.0-dev.428 | 2021-12-09 14:58:53 -0700
* GH-1125: Support GRE ARUBA headers (Tim Wojtulewicz, Corelight)

View file

@ -1 +1 @@
4.2.0-dev.428
4.2.0-dev.432

View file

@ -2626,7 +2626,7 @@ TypePtr AssignExpr::InitType() const
{
if ( op1->Tag() != EXPR_LIST )
{
Error("bad initializer");
Error("bad initializer, first operand should be a list");
return nullptr;
}
@ -3490,7 +3490,10 @@ TableConstructorExpr::TableConstructorExpr(ListExprPtr constructor_list,
SetType(init_type(op.get()));
if ( ! type )
{
SetError();
return;
}
else if ( type->Tag() != TYPE_TABLE || type->AsTableType()->IsSet() )
SetError("values in table(...) constructor do not specify a table");

View file

@ -721,8 +721,12 @@ expr:
{
--in_hook;
set_location(@1, @3);
if ( $3->Tag() != EXPR_CALL )
$3->Error("not a valid hook call expression");
else if ( $3->AsCallExpr()->Func()->GetType()->AsFuncType()->Flavor() != FUNC_FLAVOR_HOOK )
$3->Error("hook keyword should only be used to call hooks");
$$ = $3;
}

View file

@ -1,9 +1,10 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in ./invalid.zeek, line 9: hook cannot be called directly, use hook operator (myhook)
error in ./invalid.zeek, line 10: hook cannot be called directly, use hook operator (myhook)
error in ./invalid.zeek, line 11: hook cannot be called directly, use hook operator (myhook)
error in ./invalid.zeek, line 12: not a valid hook call expression (2 + 2)
warning in ./invalid.zeek, line 12: expression value ignored (2 + 2)
error in ./invalid.zeek, line 13: not a valid hook call expression (2 + 2)
error in ./invalid.zeek, line 15: hook cannot be called directly, use hook operator (h)
error in ./invalid.zeek, line 16: hook cannot be called directly, use hook operator (h)
error in ./invalid.zeek, line 14: hook cannot be called directly, use hook operator (myhook)
error in ./invalid.zeek, line 15: hook cannot be called directly, use hook operator (myhook)
error in ./invalid.zeek, line 16: hook cannot be called directly, use hook operator (myhook)
error in ./invalid.zeek, line 17: not a valid hook call expression (2 + 2)
warning in ./invalid.zeek, line 17: expression value ignored (2 + 2)
error in ./invalid.zeek, line 18: not a valid hook call expression (2 + 2)
error in ./invalid.zeek, line 20: hook cannot be called directly, use hook operator (h)
error in ./invalid.zeek, line 21: hook cannot be called directly, use hook operator (h)
error in ./invalid.zeek, line 24: hook keyword should only be used to call hooks (foo())

View file

@ -15,7 +15,7 @@ hook myhook(i: count)
hook myhook(i: count) &priority=-1
{
print "other myhook()", i;
}
}
function indirect(): hook(i: count)
{
@ -66,6 +66,11 @@ hook myhook(i: count)
if ( i == 0 ) break;
}
function foo()
{
print "foo()";
}
event zeek_init()
{
myhook(3);
@ -78,5 +83,6 @@ event zeek_init()
if ( h(3) )
print "hmm";
print "done";
hook foo();
}
@TEST-END-FILE