diff --git a/src/Val.cc b/src/Val.cc index 8d0fbdf499..965ea3d026 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -2883,7 +2883,7 @@ RecordVal::~RecordVal() void RecordVal::Assign(int field, Val* new_val, Opcode op) { - if ( Lookup(field) && + if ( new_val && Lookup(field) && record_type->FieldType(field)->Tag() == TYPE_TABLE && new_val->AsTableVal()->FindAttr(ATTR_MERGEABLE) ) { diff --git a/testing/btest/Baseline/language.delete-field-set/output b/testing/btest/Baseline/language.delete-field-set/output new file mode 100644 index 0000000000..ccf6dbc793 --- /dev/null +++ b/testing/btest/Baseline/language.delete-field-set/output @@ -0,0 +1 @@ +[a=, b=, c=] diff --git a/testing/btest/language/delete-field-set.bro b/testing/btest/language/delete-field-set.bro new file mode 100644 index 0000000000..9469dbb2f0 --- /dev/null +++ b/testing/btest/language/delete-field-set.bro @@ -0,0 +1,17 @@ + +# @TEST-EXEC: bro %INPUT >output 2>&1 +# @TEST-EXEC: btest-diff output + +type FooBar: record { + a: set[string] &default=set(); + b: table[string] of count &default=table(); + c: vector of string &default=vector(); +}; + +global test: FooBar; + +delete test$a; +delete test$b; +delete test$c; + +print test;