Return an error if GLOBAL:: prefix is used

This commit is contained in:
Tim Wojtulewicz 2024-08-04 21:53:42 -07:00
parent ca69d9fb8f
commit 2d68b1d834
8 changed files with 7 additions and 87 deletions

View file

@ -93,11 +93,9 @@ const IDPtr& lookup_ID(const char* name, const char* curr_module, bool no_global
bool check_export) { bool check_export) {
bool explicit_global = zeek::util::starts_with(name, "::"); bool explicit_global = zeek::util::starts_with(name, "::");
// Ad-hoc deprecation if a name starts with "GLOBAL::". In v7.1 we could static std::string global_prefix = util::fmt("%s::", GLOBAL_MODULE_NAME);
// tweak {ID} to reject GLOBAL::, or switch this warning to error instead. if ( zeek::util::starts_with(name, global_prefix) )
static std::string deprecated_prefix = util::fmt("%s::", GLOBAL_MODULE_NAME); reporter->Error("Using GLOBAL:: as a prefix is invalid. Use :: instead (%s)", name);
if ( zeek::util::starts_with(name, deprecated_prefix) )
reporter->Deprecation(util::fmt("Remove in v7.1: Use :: instead of %s (%s)", deprecated_prefix.c_str(), name));
std::string fullname = make_full_var_name(curr_module, name); std::string fullname = make_full_var_name(curr_module, name);
std::string ID_module = extract_module_name(fullname.c_str()); std::string ID_module = extract_module_name(fullname.c_str());

View file

@ -1,3 +0,0 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
warning in <...>/deprecate-global.zeek, line 22: Remove in v7.1: Use :: instead of GLOBAL:: (GLOBAL::test_function)
warning in <...>/deprecate-global.zeek, line 26: Remove in v7.1: Use :: instead of GLOBAL:: (GLOBAL::X)

View file

@ -1,4 +0,0 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
X, shadows ::X (42)
::X, 42
GLOBAL::X, 42

View file

@ -1,9 +1 @@
### 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.
warning in <...>/global-colon-colon.zeek, line 67: Remove in v7.1: Use :: instead of GLOBAL:: (GLOBAL::X)
warning in <...>/global-colon-colon.zeek, line 75: Remove in v7.1: Use :: instead of GLOBAL:: (GLOBAL::my_hook)
warning in <...>/global-colon-colon.zeek, line 82: Remove in v7.1: Use :: instead of GLOBAL:: (GLOBAL::func)
warning in <...>/global-colon-colon.zeek, line 89: Remove in v7.1: Use :: instead of GLOBAL:: (GLOBAL::funcX)
warning in <...>/global-colon-colon.zeek, line 110: Remove in v7.1: Use :: instead of GLOBAL:: (GLOBAL::X)
warning in <...>/global-colon-colon.zeek, line 118: Remove in v7.1: Use :: instead of GLOBAL:: (GLOBAL::my_hook)
warning in <...>/global-colon-colon.zeek, line 125: Remove in v7.1: Use :: instead of GLOBAL:: (GLOBAL::func)
warning in <...>/global-colon-colon.zeek, line 132: Remove in v7.1: Use :: instead of GLOBAL:: (GLOBAL::funcX)

View file

@ -3,8 +3,6 @@
MyModule X MyModule X
(MyModule) print MyModule::X (MyModule) print MyModule::X
MyModule X MyModule X
(MyModule) print GLOBAL::X
global X
(MyModule) print ::X (MyModule) print ::X
global X global X
(MyModule) hook my_hook() (MyModule) hook my_hook()
@ -13,32 +11,22 @@
(MyModule) hook MyModule::my_hook() (MyModule) hook MyModule::my_hook()
MyModule::my_hook() (in GLOBAL) MyModule::my_hook() (in GLOBAL)
MyModule::my_hook() MyModule::my_hook()
(MyModule) hook GLOBAL::my_hook()
my_hook() (in GLOBAL)
::my_hook() (in GLOBAL)
::my_hook() (in MyModule using ::)
(MyModule) hook ::my_hook() (MyModule) hook ::my_hook()
my_hook() (in GLOBAL) my_hook() (in GLOBAL)
::my_hook() (in GLOBAL) ::my_hook() (in GLOBAL)
::my_hook() (in MyModule using ::) ::my_hook() (in MyModule using ::)
(MyModule) call func() (MyModule) call func()
MyModule::func() MyModule::func()
(MyModule) call GLOBAL::func()
GLOBAL::func()
(MyModule) call ::func() (MyModule) call ::func()
GLOBAL::func() GLOBAL::func()
(MyModule) call funcX() (MyModule) call funcX()
::funcX() (in MyModule) ::funcX() (in MyModule)
(MyModule) call GLOBAL::funcX()
::funcX() (in MyModule)
(MyModule) call ::funcX() (MyModule) call ::funcX()
::funcX() (in MyModule) ::funcX() (in MyModule)
(G) print X (G) print X
global X global X
(G) print MyModule::X (G) print MyModule::X
MyModule X MyModule X
(G) print GLOBAL::X
global X
(G) print ::X (G) print ::X
global X global X
(G) hook my_hook() (G) hook my_hook()
@ -48,24 +36,16 @@
(G) MyModule::my_hook() (G) MyModule::my_hook()
MyModule::my_hook() (in GLOBAL) MyModule::my_hook() (in GLOBAL)
MyModule::my_hook() MyModule::my_hook()
(G) hook GLOBAL::my_hook()
my_hook() (in GLOBAL)
::my_hook() (in GLOBAL)
::my_hook() (in MyModule using ::)
(G) hook ::my_hook() (G) hook ::my_hook()
my_hook() (in GLOBAL) my_hook() (in GLOBAL)
::my_hook() (in GLOBAL) ::my_hook() (in GLOBAL)
::my_hook() (in MyModule using ::) ::my_hook() (in MyModule using ::)
(G) call func() (G) call func()
GLOBAL::func() GLOBAL::func()
(G) call GLOBAL::func()
GLOBAL::func()
(G) call ::func() (G) call ::func()
GLOBAL::func() GLOBAL::func()
(G) call funcX() (G) call funcX()
::funcX() (in MyModule) ::funcX() (in MyModule)
(G) call GLOBAL::funcX()
::funcX() (in MyModule)
(G) call ::funcX() (G) call ::funcX()
::funcX() (in MyModule) ::funcX() (in MyModule)
MyModule::my_event() (in MyModule) MyModule::my_event() (in MyModule)

View file

@ -1,27 +0,0 @@
# @TEST-DOC: Adapt in v7.1 to check for errors upon GLOBAL accesses.
# @TEST-EXEC: zeek -b %INPUT >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
module GLOBAL;
function test_function() { }
global X = 42;
module MyModule;
global X = fmt("shadows ::X (%s)", ::X);
event zeek_init()
{
test_function();
::test_function();
GLOBAL::test_function();
print "X", X;
print "::X", ::X;
print "GLOBAL::X", GLOBAL::X;
}

View file

@ -30,7 +30,7 @@ hook my_hook() &priority=9
print " MyModule::my_hook()"; print " MyModule::my_hook()";
} }
# This implements GLOBAL::my_hook() # This implements a global my_hook()
hook ::my_hook() &priority=8 hook ::my_hook() &priority=8
{ {
print " ::my_hook() (in MyModule using ::)"; print " ::my_hook() (in MyModule using ::)";
@ -63,37 +63,29 @@ event zeek_init() &priority=5
print fmt(" %s", X); print fmt(" %s", X);
print "(MyModule) print MyModule::X"; print "(MyModule) print MyModule::X";
print fmt(" %s", MyModule::X); print fmt(" %s", MyModule::X);
print "(MyModule) print GLOBAL::X";
print fmt(" %s", GLOBAL::X);
print "(MyModule) print ::X"; print "(MyModule) print ::X";
print fmt(" %s", ::X); print fmt(" %s", ::X);
print "(MyModule) hook my_hook()"; print "(MyModule) hook my_hook()";
hook my_hook(); # This uses MyModule::my_hook(); hook my_hook(); # This uses MyModule::my_hook();
print "(MyModule) hook MyModule::my_hook()"; print "(MyModule) hook MyModule::my_hook()";
hook MyModule::my_hook(); # This uses MyModule::hook(); hook MyModule::my_hook(); # This uses MyModule::hook();
print "(MyModule) hook GLOBAL::my_hook()";
hook GLOBAL::my_hook();
print "(MyModule) hook ::my_hook()"; print "(MyModule) hook ::my_hook()";
hook ::my_hook(); hook ::my_hook();
print "(MyModule) call func()"; print "(MyModule) call func()";
func(); func();
print "(MyModule) call GLOBAL::func()";
GLOBAL::func();
print "(MyModule) call ::func()"; print "(MyModule) call ::func()";
::func(); ::func();
print "(MyModule) call funcX()"; print "(MyModule) call funcX()";
funcX(); funcX();
print "(MyModule) call GLOBAL::funcX()";
GLOBAL::funcX();
print "(MyModule) call ::funcX()"; print "(MyModule) call ::funcX()";
::funcX(); ::funcX();
# This schedules MyEvent::my_event() # This schedules MyEvent::my_event()
event my_event(); event my_event();
# This schedules the GLOBAL::my_event(); # This schedules the global ::my_event()
event ::my_event(); event ::my_event();
} }
@ -106,30 +98,22 @@ event zeek_init() &priority=5
print fmt(" %s", X); print fmt(" %s", X);
print "(G) print MyModule::X"; print "(G) print MyModule::X";
print fmt(" %s", MyModule::X); print fmt(" %s", MyModule::X);
print "(G) print GLOBAL::X";
print fmt(" %s", GLOBAL::X);
print "(G) print ::X"; print "(G) print ::X";
print fmt(" %s", ::X); print fmt(" %s", ::X);
print "(G) hook my_hook()"; print "(G) hook my_hook()";
hook my_hook(); # This uses GLOBAL::my_hook(); hook my_hook(); # This uses global my_hook();
print "(G) MyModule::my_hook()"; print "(G) MyModule::my_hook()";
hook MyModule::my_hook(); # This uses MyModule::hook(); hook MyModule::my_hook(); # This uses MyModule::hook();
print "(G) hook GLOBAL::my_hook()";
hook GLOBAL::my_hook();
print "(G) hook ::my_hook()"; print "(G) hook ::my_hook()";
hook ::my_hook(); hook ::my_hook();
print "(G) call func()"; print "(G) call func()";
func(); func();
print "(G) call GLOBAL::func()";
GLOBAL::func();
print "(G) call ::func()"; print "(G) call ::func()";
::func(); ::func();
print "(G) call funcX()"; print "(G) call funcX()";
funcX(); funcX();
print "(G) call GLOBAL::funcX()";
GLOBAL::funcX();
print "(G) call ::funcX()"; print "(G) call ::funcX()";
::funcX(); ::funcX();
} }

View file

@ -9,7 +9,7 @@ type r: record { b: count; };
event zeek_init() event zeek_init()
{ {
local x: GLOBAL::r; local x: ::r;
x$a = 5; x$a = 5;
local y: test::r; local y: test::r;