From 5ed13284c3fb758dfcc33d450a80f96f5adcf855 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Thu, 27 Aug 2020 14:01:08 -0700 Subject: [PATCH] GH-165: Fix global initializations that indirectly use builtin types --- src/Func.cc | 1 + src/ID.cc | 2 +- src/ID.h | 2 +- src/NetVar.cc | 13 +++++++++++-- src/NetVar.h | 1 + .../out | 1 + .../global-init-calls-bif-using-builtin-type.zeek | 14 ++++++++++++++ 7 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 testing/btest/Baseline/language.global-init-calls-bif-using-builtin-type/out create mode 100644 testing/btest/language/global-init-calls-bif-using-builtin-type.zeek diff --git a/src/Func.cc b/src/Func.cc index 6c54a3ccc1..eb9a2a537f 100644 --- a/src/Func.cc +++ b/src/Func.cc @@ -930,6 +930,7 @@ void init_primary_bifs() #include "option.bif.func_init" #include "supervisor.bif.func_init" + init_builtin_types(); did_builtin_init = true; } diff --git a/src/ID.cc b/src/ID.cc index 5a54457b25..001bc744f2 100644 --- a/src/ID.cc +++ b/src/ID.cc @@ -90,7 +90,7 @@ FuncPtr id::find_func(std::string_view name) return v->AsFuncPtr(); } -void id::detail::init() +void id::detail::init_types() { conn_id = id::find_type("conn_id"); endpoint = id::find_type("endpoint"); diff --git a/src/ID.h b/src/ID.h index 98e8bf0677..be6831b9c6 100644 --- a/src/ID.h +++ b/src/ID.h @@ -272,7 +272,7 @@ extern VectorTypePtr index_vec; namespace detail { -void init(); +void init_types(); } // namespace detail } // namespace zeek::id diff --git a/src/NetVar.cc b/src/NetVar.cc index 8961d60311..edd778fa92 100644 --- a/src/NetVar.cc +++ b/src/NetVar.cc @@ -207,11 +207,15 @@ static void bif_init_event_handlers() static void bif_init_net_var() { #include "const.bif.netvar_init" -#include "types.bif.netvar_init" #include "reporter.bif.netvar_init" #include "supervisor.bif.netvar_init" } +static void init_bif_types() + { +#include "types.bif.netvar_init" + } + #include "const.bif.netvar_def" #include "types.bif.netvar_def" #include "event.bif.netvar_def" @@ -240,11 +244,16 @@ void init_general_global_var() extern void zeek_legacy_netvar_init(); +void init_builtin_types() + { + init_bif_types(); + id::detail::init_types(); + } + void init_net_var() { bif_init_net_var(); - id::detail::init(); zeek_legacy_netvar_init(); ignore_checksums = id::find_val("ignore_checksums")->AsBool(); diff --git a/src/NetVar.h b/src/NetVar.h index fba7d5494b..45199108b0 100644 --- a/src/NetVar.h +++ b/src/NetVar.h @@ -103,6 +103,7 @@ extern void init_general_global_var(); extern void init_event_handlers(); extern void init_net_var(); +extern void init_builtin_types(); } // namespace zeek::detail diff --git a/testing/btest/Baseline/language.global-init-calls-bif-using-builtin-type/out b/testing/btest/Baseline/language.global-init-calls-bif-using-builtin-type/out new file mode 100644 index 0000000000..4c5aada71c --- /dev/null +++ b/testing/btest/Baseline/language.global-init-calls-bif-using-builtin-type/out @@ -0,0 +1 @@ +tcp and port 80 diff --git a/testing/btest/language/global-init-calls-bif-using-builtin-type.zeek b/testing/btest/language/global-init-calls-bif-using-builtin-type.zeek new file mode 100644 index 0000000000..70b4f3b218 --- /dev/null +++ b/testing/btest/language/global-init-calls-bif-using-builtin-type.zeek @@ -0,0 +1,14 @@ +# @TEST-EXEC: zeek -b %INPUT >out +# @TEST-EXEC: btest-diff out + +# This test isn't specifically testing the PacketFilter functionality, rather +# that a global variable can be initialized using a BIF call and that BIF call +# can make use of some global type pointers to builtin types/aliases. + +@load base/frameworks/packet-filter +redef PacketFilter::restricted_filter = PacketFilter::port_to_bpf(80/tcp); + +event zeek_init() + { + print PacketFilter::restricted_filter; + }