diff --git a/src/EventHandler.cc b/src/EventHandler.cc index 9cc5306c9c..ef0c9fc63c 100644 --- a/src/EventHandler.cc +++ b/src/EventHandler.cc @@ -69,7 +69,32 @@ void EventHandler::Call(val_list* vl, bool no_remote) } if ( local ) + { + if ( FType() ) + { + const type_list* arg_types = type->ArgTypes()->Types(); + loop_over_list(*vl, i) + { + Val* v = (*vl)[i]; + BroType* va_t = v->Type(); + BroType* ar_t = (*arg_types)[i]; + if ( va_t->Tag() == TYPE_RECORD && ar_t->Tag() == TYPE_RECORD ) + { + if ( ! same_type(va_t, ar_t) ) + { + Val* nv; + nv = v->AsRecordVal()->CoerceTo(ar_t->AsRecordType()); + if ( nv ) + { + vl->replace(i, nv); + Unref(v); + } + } + } + } + } Unref(local->Call(vl)); + } else { loop_over_list(*vl, i) diff --git a/testing/btest/Baseline/istate.pybroccoli/bro..stdout b/testing/btest/Baseline/istate.pybroccoli/bro..stdout index f8c0c63c45..9eec3a4550 100644 --- a/testing/btest/Baseline/istate.pybroccoli/bro..stdout +++ b/testing/btest/Baseline/istate.pybroccoli/bro..stdout @@ -13,3 +13,7 @@ Servus ==== record [a=42, b=6.6.7.7] 42, 6.6.7.7 +==== coerced record +[a=13, b=, c=helloworld] +13 +helloworld