diff --git a/src/RuleMatcher.cc b/src/RuleMatcher.cc index 5b6f673a8a..974004e2ac 100644 --- a/src/RuleMatcher.cc +++ b/src/RuleMatcher.cc @@ -1243,15 +1243,16 @@ void id_to_maskedvallist(const char* id, maskedvalue_list* append_to, if ( v->Type()->Tag() == TYPE_TABLE ) { - val_list* vals = v->AsTableVal()->ConvertToPureList()->Vals(); + ListVal* lv = v->AsTableVal()->ConvertToPureList(); + val_list* vals = lv->Vals(); loop_over_list(*vals, i ) if ( ! val_to_maskedval((*vals)[i], append_to, prefix_vector) ) - { - delete_vals(vals); + { + Unref(lv); return; - } + } - delete_vals(vals); + Unref(lv); } else diff --git a/testing/btest/Baseline/signatures.id-lookup/id.out b/testing/btest/Baseline/signatures.id-lookup/id.out index 4a5310a3b2..3f285b85a0 100644 --- a/testing/btest/Baseline/signatures.id-lookup/id.out +++ b/testing/btest/Baseline/signatures.id-lookup/id.out @@ -1 +1,2 @@ +signature_match [orig_h=127.0.0.1, orig_p=30000/udp, resp_h=127.0.0.1, resp_p=13000/udp] - idtable signature_match [orig_h=127.0.0.1, orig_p=30000/udp, resp_h=127.0.0.1, resp_p=13000/udp] - id diff --git a/testing/btest/signatures/id-lookup.bro b/testing/btest/signatures/id-lookup.bro index 2e32224bc8..f055e73725 100644 --- a/testing/btest/signatures/id-lookup.bro +++ b/testing/btest/signatures/id-lookup.bro @@ -6,10 +6,21 @@ signature id { ip-proto == udp_proto_number event "id" } + +signature idtable { + dst-ip == mynets + event "idtable" +} @TEST-END-FILE const udp_proto_number = 17; +const mynets: set[subnet] = { + 192.168.1.0/24, + 10.0.0.0/8, + 127.0.0.0/24 +}; + event signature_match(state: signature_state, msg: string, data: string) { print fmt("signature_match %s - %s", state$conn$id, msg);