Merge remote-tracking branch 'origin/topic/robin/gh-467-addto'

- In this merge commit: fixed parentheses/typo that breaks compilation

* origin/topic/robin/gh-467-addto:
  Catch if &add_func/&delete_func is applied to IDs that don't have values.
This commit is contained in:
Jon Siwek 2020-08-18 12:10:26 -07:00
commit 3fc86a39b8
5 changed files with 32 additions and 1 deletions

View file

@ -1,3 +1,10 @@
3.3.0-dev.113 | 2020-08-18 12:10:26 -0700
* GH-467: Catch use of &add_func/&delete_func on IDs without values. (Robin Sommer, Corelight)
* Fix compiler warning from missing namepsace qualification (Tim Wojtulewicz, Corelight)
3.3.0-dev.109 | 2020-08-14 10:00:07 -0700 3.3.0-dev.109 | 2020-08-14 10:00:07 -0700
* GH-178: Add new string bif methods based on python string utilities (Tim Wojtulewicz, Corelight) * GH-178: Add new string bif methods based on python string utilities (Tim Wojtulewicz, Corelight)

View file

@ -1 +1 @@
3.3.0-dev.109 3.3.0-dev.113

View file

@ -220,6 +220,13 @@ void ID::SetVal(ExprPtr ev, InitClass c)
if ( ! a ) if ( ! a )
Internal("no add/delete function in ID::SetVal"); Internal("no add/delete function in ID::SetVal");
if ( ! val )
{
Error(fmt("%s initializer applied to ID without value",
c == INIT_EXTRA ? "+=" : "-="), this);
return;
}
EvalFunc(a->GetExpr(), std::move(ev)); EvalFunc(a->GetExpr(), std::move(ev));
} }

View file

@ -0,0 +1,2 @@
error in /Users/robin/bro/master/testing/btest/.tmp/language.global-unset-addto/global-unset-addto.zeek, line 4: += initializer applied to ID without value (a)
error in /Users/robin/bro/master/testing/btest/.tmp/language.global-unset-addto/global-unset-addto.zeek, line 5: -= initializer applied to ID without value (b)

View file

@ -0,0 +1,15 @@
# @TEST-EXEC-FAIL: zeek -b %INPUT >output 2>&1
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff output
global a: count &add_func = function(old: count, new: count): count { return 3; };
global b: count &delete_func = function(old: count, new: count): count { return 3; };
redef a += 13;
redef b -= 13;
# The following is ok.
global c: count &redef &add_func = function(old: count, new: count): count { return 3; };
redef c = 0;
redef c += 13;