diff --git a/CHANGES b/CHANGES index 9a8a6a02de..0508bf3585 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +5.0.0-dev.70 | 2022-01-25 13:52:00 -0700 + + * bug fix for vector slice assignment (Vern Paxson, Corelight) + 5.0.0-dev.67 | 2022-01-25 12:25:48 +0000 * updated Bro->Zeek in comments in the source tree (Vern Paxson, Corelight) diff --git a/VERSION b/VERSION index a5f6be50a5..d8bca667ce 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5.0.0-dev.67 +5.0.0-dev.70 diff --git a/src/Val.cc b/src/Val.cc index d476f32a6c..fa6b5934dd 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -3326,19 +3326,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 { 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; +}