diff --git a/src/Attr.cc b/src/Attr.cc index 46299dfd2e..ceea050115 100644 --- a/src/Attr.cc +++ b/src/Attr.cc @@ -224,7 +224,7 @@ void Attributes::AddAttr(AttrPtr attr, bool is_redef) return new_tag == ATTR_LOG || new_tag == ATTR_OPTIONAL || new_tag == ATTR_REDEF || new_tag == ATTR_BROKER_STORE_ALLOW_COMPLEX || new_tag == ATTR_RAW_OUTPUT || - new_tag == ATTR_ERROR_HANDLER; + new_tag == ATTR_ERROR_HANDLER || new_tag == ATTR_IS_USED; }; // A `redef` is allowed to overwrite an existing attribute instead of diff --git a/testing/btest/Baseline/signatures.signature-cond-used-twice/.stderr b/testing/btest/Baseline/signatures.signature-cond-used-twice/.stderr new file mode 100644 index 0000000000..49d861c74c --- /dev/null +++ b/testing/btest/Baseline/signatures.signature-cond-used-twice/.stderr @@ -0,0 +1 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. diff --git a/testing/btest/Baseline/signatures.signature-cond-used-twice/.stdout b/testing/btest/Baseline/signatures.signature-cond-used-twice/.stdout new file mode 100644 index 0000000000..fb15834e12 --- /dev/null +++ b/testing/btest/Baseline/signatures.signature-cond-used-twice/.stdout @@ -0,0 +1,5 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +signature_cond, GET /download/CHANGES.bro-aux.tx +signature_match, GET, GET /download/CHANGES.bro-aux.tx +signature_cond, HTTP/1.1 200 OK\x0d\x0aDate: Thu, 07 M +signature_match, STATUS, HTTP/1.1 200 OK\x0d\x0aDate: Thu, 07 M diff --git a/testing/btest/signatures/signature-cond-used-twice.zeek b/testing/btest/signatures/signature-cond-used-twice.zeek new file mode 100644 index 0000000000..49a4ae2d64 --- /dev/null +++ b/testing/btest/signatures/signature-cond-used-twice.zeek @@ -0,0 +1,36 @@ +# @TEST-DOC: The function signature_cond is used in two eval's in test.sig should not fail... +# @TEST-EXEC: unset ZEEK_ALLOW_INIT_ERRORS; zeek -b %INPUT -r $TRACES/http/get.trace +# @TEST-EXEC: btest-diff .stderr +# @TEST-EXEC: btest-diff .stdout +module SignatureEvalTest; + +@load-sigs ./test.sig + +event signature_match(state: signature_state, msg: string, data: string) + { + print "signature_match", msg, data[:32]; + } + +function signature_cond(state: signature_state, data: string): bool + { + print "signature_cond", data[:32]; + return T; + } + + +@TEST-START-FILE test.sig +signature my-first-sig { + ip-proto == tcp + dst-port == 80 + payload /GET/ + event "GET" + eval SignatureEvalTest::signature_cond +} + +signature my-second-sig { + ip-proto == tcp + payload /HTTP\/1\.1 [0-9]+/ + event "STATUS" + eval SignatureEvalTest::signature_cond +} +@TEST-END-FILE