Merge remote-tracking branch 'origin/topic/vern/vector-hole-loops'

* origin/topic/vern/vector-hole-loops:
  fix for looping over vectors with holes per https://github.com/zeek/zeek/issues/1763
  btest for https://github.com/zeek/zeek/issues/1763
This commit is contained in:
Tim Wojtulewicz 2021-09-08 12:04:45 -07:00
commit 8414d13030
5 changed files with 39 additions and 1 deletions

View file

@ -1,3 +1,9 @@
4.2.0-dev.157 | 2021-09-08 12:04:45 -0700
* fix for looping over vectors with holes per https://github.com/zeek/zeek/issues/1763 (Vern Paxson, Corelight)
* btest for https://github.com/zeek/zeek/issues/1763 (Vern Paxson, Corelight)
4.2.0-dev.154 | 2021-09-08 12:03:51 -0700
* Fix mis-usage of string::append that leads to an overflow (Tim Wojtulewicz, Corelight)

View file

@ -1 +1 @@
4.2.0-dev.154
4.2.0-dev.157

View file

@ -1349,9 +1349,13 @@ ValPtr ForStmt::DoExec(Frame* f, Val* v, StmtFlowType& flow)
else if ( v->GetType()->Tag() == TYPE_VECTOR )
{
VectorVal* vv = v->AsVectorVal();
const auto& raw_vv = *vv->RawVec();
for ( auto i = 0u; i < vv->Size(); ++i )
{
if ( ! raw_vv[i] )
continue;
// Set the loop variable to the current index, and make
// another pass over the loop body.
f->SetElement((*loop_vars)[0], val_mgr->Count(i));

View file

@ -0,0 +1,8 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[, foo, bar, , baz]
1
2
4
foo
bar
baz

View file

@ -0,0 +1,20 @@
# @TEST-EXEC: zeek -b %INPUT >out
# @TEST-EXEC: btest-diff out
event zeek_init()
{
local v: vector of string;
v[1] = "foo";
v[2] = "bar";
v[4] = "baz";
print v;
for ( idx in v )
print idx;
for ( idx in v )
print v[idx];
}