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 4.2.0-dev.428 | 2021-12-09 14:58:53 -0700
* GH-1125: Support GRE ARUBA headers (Tim Wojtulewicz, Corelight) * 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 ) if ( op1->Tag() != EXPR_LIST )
{ {
Error("bad initializer"); Error("bad initializer, first operand should be a list");
return nullptr; return nullptr;
} }
@ -3490,7 +3490,10 @@ TableConstructorExpr::TableConstructorExpr(ListExprPtr constructor_list,
SetType(init_type(op.get())); SetType(init_type(op.get()));
if ( ! type ) if ( ! type )
{
SetError(); SetError();
return;
}
else if ( type->Tag() != TYPE_TABLE || type->AsTableType()->IsSet() ) else if ( type->Tag() != TYPE_TABLE || type->AsTableType()->IsSet() )
SetError("values in table(...) constructor do not specify a table"); SetError("values in table(...) constructor do not specify a table");

View file

@ -721,8 +721,12 @@ expr:
{ {
--in_hook; --in_hook;
set_location(@1, @3); set_location(@1, @3);
if ( $3->Tag() != EXPR_CALL ) if ( $3->Tag() != EXPR_CALL )
$3->Error("not a valid hook call expression"); $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; $$ = $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. ### 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 14: 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 15: 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 16: hook cannot be called directly, use hook operator (myhook)
error in ./invalid.zeek, line 12: not a valid hook call expression (2 + 2) error in ./invalid.zeek, line 17: not a valid hook call expression (2 + 2)
warning in ./invalid.zeek, line 12: expression value ignored (2 + 2) warning in ./invalid.zeek, line 17: expression value ignored (2 + 2)
error in ./invalid.zeek, line 13: not a valid hook call expression (2 + 2) error in ./invalid.zeek, line 18: 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 20: 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 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

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