From 00e111135bf29c40f139698da43eba6e4d4be90c Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Thu, 21 Jul 2022 13:58:00 -0700 Subject: [PATCH] Return an error if redef'ing a variable without redef attribute --- src/Var.cc | 6 ++++ .../language.redef-global-function/.stderr | 2 ++ .../language.redef-global-function/out | 2 ++ .../btest/language/redef-global-function.zeek | 29 +++++++++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 testing/btest/Baseline/language.redef-global-function/.stderr create mode 100644 testing/btest/Baseline/language.redef-global-function/out create mode 100644 testing/btest/language/redef-global-function.zeek diff --git a/src/Var.cc b/src/Var.cc index 6110ea4ba9..76727b7bdc 100644 --- a/src/Var.cc +++ b/src/Var.cc @@ -223,6 +223,12 @@ static void make_var(const IDPtr& id, TypePtr t, InitClass c, ExprPtr init, id->Warn("redefinition requires \"redef\"", redef_obj, true); } + else if ( dt == VAR_REDEF && ! id->IsRedefinable() ) + { + id->Error("cannot redefine a variable not marked with &redef", init.get()); + return; + } + else if ( dt != VAR_REDEF || init || ! attr ) { if ( IsFunc(id->GetType()->Tag()) ) diff --git a/testing/btest/Baseline/language.redef-global-function/.stderr b/testing/btest/Baseline/language.redef-global-function/.stderr new file mode 100644 index 0000000000..4fd5fccb8d --- /dev/null +++ b/testing/btest/Baseline/language.redef-global-function/.stderr @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +error in <...>/redef-global-function.zeek, line 22 and , line 1: cannot redefine a variable not marked with &redef (funca) diff --git a/testing/btest/Baseline/language.redef-global-function/out b/testing/btest/Baseline/language.redef-global-function/out new file mode 100644 index 0000000000..15d84282a1 --- /dev/null +++ b/testing/btest/Baseline/language.redef-global-function/out @@ -0,0 +1,2 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +func2() diff --git a/testing/btest/language/redef-global-function.zeek b/testing/btest/language/redef-global-function.zeek new file mode 100644 index 0000000000..3e8abb343e --- /dev/null +++ b/testing/btest/language/redef-global-function.zeek @@ -0,0 +1,29 @@ +# @TEST-EXEC: zeek -b %INPUT -e "redef funcb = func2;" > out +# @TEST-EXEC-FAIL: zeek -b %INPUT -e "redef funca = func2;" >> out +# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out +# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff .stderr + +export { + global func1: function(); + global func2: function(); +} + +function func1() + { + print "func1()"; + } + +function func2() + { + print "func2()"; + } + +export { + global funca = func1; + global funcb = func1 &redef; +} + +event zeek_init() + { + funcb(); + }