diff --git a/testing/btest/Baseline/language.set/out b/testing/btest/Baseline/language.set/out index fa52244f6d..f055d1dd03 100644 --- a/testing/btest/Baseline/language.set/out +++ b/testing/btest/Baseline/language.set/out @@ -70,3 +70,8 @@ equality (FAIL) non-equality (PASS) equality (FAIL) magnitude (FAIL) +nested-set-add (PASS) +nested-set-add (PASS) +nested-set-add (PASS) +nested-set-del (PASS) +nested-set-in (PASS) diff --git a/testing/btest/Baseline/language.table-nested-set-ordering/out b/testing/btest/Baseline/language.table-nested-set-ordering/out new file mode 100644 index 0000000000..5f99ba9e93 --- /dev/null +++ b/testing/btest/Baseline/language.table-nested-set-ordering/out @@ -0,0 +1,5 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +[a={ +SHA1, +MD5 +}, b=12345678901234567890, c=] diff --git a/testing/btest/Baseline/language.table/out b/testing/btest/Baseline/language.table/out index a0e5ab114d..e637e81437 100644 --- a/testing/btest/Baseline/language.table/out +++ b/testing/btest/Baseline/language.table/out @@ -47,3 +47,5 @@ remove element (PASS) !in operator (PASS) remove element (PASS) !in operator (PASS) +nested table addition (PASS) +nested table removal (PASS) diff --git a/testing/btest/language/nested-sets.zeek b/testing/btest/language/nested-sets.zeek index 1e83b6184d..35d2275a61 100644 --- a/testing/btest/language/nested-sets.zeek +++ b/testing/btest/language/nested-sets.zeek @@ -28,6 +28,8 @@ type r: record { b: set[count]; }; +type s: set[set[count]]; + global foo: set[r]; global bar = set(1,3,5); diff --git a/testing/btest/language/set.zeek b/testing/btest/language/set.zeek index 1c3ab85ef2..847d4ad4bc 100644 --- a/testing/btest/language/set.zeek +++ b/testing/btest/language/set.zeek @@ -24,6 +24,7 @@ event zeek_init() local s6: set[port, string, bool] = set(); local s7: set[port, string, bool]; local s8 = set( [8/tcp, "type inference", T] ); + local s9: set[set[count]] = set(); # Type inference tests @@ -181,5 +182,15 @@ event zeek_init() test_case( "equality", a == a | set(5,11) ); test_case( "magnitude", |a_and_b| == |a_or_b|); + + add s9[set(1,2,3)]; + test_case( "nested-set-add", |s9| == 1 ); + add s9[set(1,2,3)]; + test_case( "nested-set-add", |s9| == 1 ); + add s9[set(2,3,4)]; + test_case( "nested-set-add", |s9| == 2 ); + delete s9[set(1,2,3)]; + test_case( "nested-set-del", |s9| == 1 ); + test_case( "nested-set-in", set(2,3,4) in s9 ); } diff --git a/testing/btest/language/table-nested-set-ordering.zeek b/testing/btest/language/table-nested-set-ordering.zeek new file mode 100644 index 0000000000..83a3ae8f68 --- /dev/null +++ b/testing/btest/language/table-nested-set-ordering.zeek @@ -0,0 +1,25 @@ +# This testcase used to cause subtle memory overflow problems due to deviating +# traversal order of the k$a set members. With 4.2, this will trigger an +# InternalError due to new bounds-checking. For context, see GHI-1753. +# +# @TEST-EXEC: zeek -b %INPUT >out +# @TEST-EXEC: btest-diff out + +type Key: record { + a: set[string]; + b: string &optional; + c: string &optional; +}; + +global state: table[Key] of count = {}; + +event zeek_init() { + + local k: Key; + + k$a = set("MD5", "SHA1"); + k$b = "12345678901234567890"; + + state[k] = 1; + print k; +} diff --git a/testing/btest/language/table.zeek b/testing/btest/language/table.zeek index cb26b5c17b..92284986ec 100644 --- a/testing/btest/language/table.zeek +++ b/testing/btest/language/table.zeek @@ -29,6 +29,9 @@ event zeek_init() local t11: table[conn_id, bool] of count = { [ [$orig_h=1.1.1.1, $orig_p=1234/tcp, $resp_h=2.2.2.2, $resp_p=4321/tcp], T ] = 42 }; + local t12: table[table[count] of string] of string = { + [table([1] = "foo", [2] = "bar")] = "oh1" + }; # Type inference tests @@ -159,5 +162,10 @@ event zeek_init() delete t11[cid, T]; test_case( "remove element", |t11| == 1 ); test_case( "!in operator", [cid, T] !in t11 ); + + t12[table([2] = "blum", [3] = "frub")] = "oh2"; + test_case( "nested table addition", |t12| == 2 ); + delete t12[table([1] = "foo", [2] = "bar")]; + test_case( "nested table removal", |t12| == 1 ); }