From 63bfae180aabcb8c5e1a8e3a722628a0e5b7c51c Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Tue, 25 Jan 2022 10:47:15 -0800 Subject: [PATCH 1/2] bug fix for vector slice assignment --- src/Val.cc | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/Val.cc b/src/Val.cc index 88becd2096..97451b01ed 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -3323,19 +3323,10 @@ bool VectorVal::Insert(unsigned int index, ValPtr element) auto n = vector_val->size(); if ( index < n ) - { // May need to delete previous element + { // Find location within existing vector elements. it = std::next(vector_val->begin(), index); if ( yield_types ) - { - if ( *it ) - ZVal::DeleteIfManaged(**it, element->GetType()); types_it = std::next(yield_types->begin(), index); - } - else if ( managed_yield ) - { - if ( *it ) - ZVal::DeleteManagedType(**it); - } } else { From c378017269bfb01ab48d94a8142890a2ed9b3f19 Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Tue, 25 Jan 2022 10:47:33 -0800 Subject: [PATCH 2/2] btest to catch vector slice assignment issues --- .../Baseline/language.vector-slice-assign/out | 2 ++ .../btest/language/vector-slice-assign.zeek | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 testing/btest/Baseline/language.vector-slice-assign/out create mode 100644 testing/btest/language/vector-slice-assign.zeek diff --git a/testing/btest/Baseline/language.vector-slice-assign/out b/testing/btest/Baseline/language.vector-slice-assign/out new file mode 100644 index 0000000000..d494ea9828 --- /dev/null +++ b/testing/btest/Baseline/language.vector-slice-assign/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. +[[seq=4], [seq=5], [seq=3], [seq=1], [seq=2], [seq=6], [seq=7]] diff --git a/testing/btest/language/vector-slice-assign.zeek b/testing/btest/language/vector-slice-assign.zeek new file mode 100644 index 0000000000..dcf4b5537f --- /dev/null +++ b/testing/btest/language/vector-slice-assign.zeek @@ -0,0 +1,24 @@ +# @TEST-EXEC: zeek -b %INPUT >out +# @TEST-EXEC: btest-diff out + +type testrec: record { + seq: count; +}; + +function make_recs(seqs: vector of count): vector of testrec +{ + local r: vector of testrec; + for (i in seqs) + r += testrec($seq=seqs[i]); + return r; +} + +event zeek_init() +{ + local seqs: vector of count = {1, 2, 3, 4, 5, 6, 7}; + local v = make_recs(seqs); + local tmp = v[0:2]; + v[0:2] = v[3:5]; + v[3:5] = tmp; + print v; +}