diff --git a/src/RuleCondition.cc b/src/RuleCondition.cc index 9df70f118b..d9a8608e8c 100644 --- a/src/RuleCondition.cc +++ b/src/RuleCondition.cc @@ -175,8 +175,14 @@ bool RuleConditionEval::DoMatch(Rule* rule, RuleEndpointState* state, try { Val* val = id->ID_Val()->AsFunc()->Call(&args); - result = val->AsBool(); - Unref(val); + + if ( val ) + { + result = val->AsBool(); + Unref(val); + } + else + result = false; } catch ( InterpreterException& e ) diff --git a/testing/btest/Baseline/signatures.eval-condition-no-return-value/.stderr b/testing/btest/Baseline/signatures.eval-condition-no-return-value/.stderr new file mode 100644 index 0000000000..a5c39c9247 --- /dev/null +++ b/testing/btest/Baseline/signatures.eval-condition-no-return-value/.stderr @@ -0,0 +1,3 @@ +1329843162.083353 warning: non-void function returns without a value: mark_conn +1329843164.920456 warning: non-void function returns without a value: mark_conn +1329843200.079930 warning: non-void function returns without a value: mark_conn diff --git a/testing/btest/Baseline/signatures.eval-condition-no-return-value/.stdout b/testing/btest/Baseline/signatures.eval-condition-no-return-value/.stdout new file mode 100644 index 0000000000..9f4b814adb --- /dev/null +++ b/testing/btest/Baseline/signatures.eval-condition-no-return-value/.stdout @@ -0,0 +1,3 @@ +Called +Called +Called diff --git a/testing/btest/signatures/eval-condition-no-return-value.bro b/testing/btest/signatures/eval-condition-no-return-value.bro new file mode 100644 index 0000000000..b1a4f5781f --- /dev/null +++ b/testing/btest/signatures/eval-condition-no-return-value.bro @@ -0,0 +1,20 @@ +# @TEST-EXEC: bro -r $TRACES/ftp/ipv4.trace %INPUT +# @TEST-EXEC: btest-diff .stdout +# @TEST-EXEC: btest-diff .stderr + +@load-sigs blah.sig + +@TEST-START-FILE blah.sig +signature blah + { + ip-proto == tcp + src-port == 21 + payload /.*/ + eval mark_conn + } +@TEST-END-FILE + +function mark_conn(state: signature_state, data: string): bool + { + print "Called"; + }