diff --git a/src/Val.cc b/src/Val.cc index a313e810cc..8d0fbdf499 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -2976,6 +2976,7 @@ RecordVal* RecordVal::CoerceTo(const RecordType* t, Val* aggr) const Expr* rhs = new ConstExpr(Lookup(i)->Ref()); Expr* e = new RecordCoerceExpr(rhs, ar_t->FieldType(t_i)->AsRecordType()); ar->Assign(t_i, e->Eval(0)); + continue; } ar->Assign(t_i, Lookup(i)->Ref()); diff --git a/testing/btest/Baseline/language.record-recursive-coercion/output b/testing/btest/Baseline/language.record-recursive-coercion/output new file mode 100644 index 0000000000..37c916713f --- /dev/null +++ b/testing/btest/Baseline/language.record-recursive-coercion/output @@ -0,0 +1 @@ +[major=4, minor=4, minor2=, addl=] diff --git a/testing/btest/language/record-recursive-coercion.bro b/testing/btest/language/record-recursive-coercion.bro new file mode 100644 index 0000000000..eda80e3d11 --- /dev/null +++ b/testing/btest/language/record-recursive-coercion.bro @@ -0,0 +1,24 @@ +# @TEST-EXEC: bro %INPUT >output 2>&1 +# @TEST-EXEC: btest-diff output + +type Version: record { + major: count &optional; + minor: count &optional; + minor2: count &optional; + addl: string &optional; +}; + +type Info: record { + name: string; + version: Version; +}; + +global matched_software: table[string] of Info = { + ["OpenSSH_4.4"] = [$name="OpenSSH", $version=[$major=4,$minor=4]], +}; + +event bro_init() + { + for ( sw in matched_software ) + print matched_software[sw]$version; + }