diff --git a/CHANGES b/CHANGES index d4fcef86e8..5db2968746 100644 --- a/CHANGES +++ b/CHANGES @@ -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 * GH-178: Add new string bif methods based on python string utilities (Tim Wojtulewicz, Corelight) diff --git a/VERSION b/VERSION index b23bd4dfb6..74d1b59943 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.3.0-dev.109 +3.3.0-dev.113 diff --git a/src/ID.cc b/src/ID.cc index 03f15e1f78..f607ab23c2 100644 --- a/src/ID.cc +++ b/src/ID.cc @@ -220,6 +220,13 @@ void ID::SetVal(ExprPtr ev, InitClass c) if ( ! a ) 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)); } diff --git a/testing/btest/Baseline/language.global-unset-addto/output b/testing/btest/Baseline/language.global-unset-addto/output new file mode 100644 index 0000000000..306f0afddb --- /dev/null +++ b/testing/btest/Baseline/language.global-unset-addto/output @@ -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) diff --git a/testing/btest/language/global-unset-addto.zeek b/testing/btest/language/global-unset-addto.zeek new file mode 100644 index 0000000000..bf2f794809 --- /dev/null +++ b/testing/btest/language/global-unset-addto.zeek @@ -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; + +