diff --git a/src/logging/Manager.cc b/src/logging/Manager.cc index 66734f16ed..9c450e48d9 100644 --- a/src/logging/Manager.cc +++ b/src/logging/Manager.cc @@ -1190,12 +1190,13 @@ bool Manager::WriteToFilters(const Manager::Stream* stream, zeek::RecordValPtr c ValPtr Manager::Delay(const EnumValPtr& id, const RecordValPtr record, FuncPtr post_delay_cb) { if ( active_writes.size() == 0 ) { - reporter->Error("invalid Log::delay() call: no active write context available"); + reporter->Error("invalid Log::delay() call: outside of Log::log_stream_policy() hook"); return make_intrusive(); } + const auto& active_write_ctx = active_writes.back(); if ( active_write_ctx.id != id || active_write_ctx.record != record ) { - reporter->Error("invalid Log::delay() call: active write mismatch"); + reporter->Error("invalid Log::delay() call: argument mismatch with active Log::write()"); return make_intrusive(); } diff --git a/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors-2/.stderr b/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors-2/.stderr index b7683d027b..a16128e7a8 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors-2/.stderr +++ b/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors-2/.stderr @@ -1,2 +1,2 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -1362692527.080972 error: invalid Log::delay() call: active write mismatch +1362692527.080972 error: invalid Log::delay() call: argument mismatch with active Log::write() diff --git a/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors-3/.stderr b/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors-3/.stderr index b7683d027b..a16128e7a8 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors-3/.stderr +++ b/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors-3/.stderr @@ -1,2 +1,2 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -1362692527.080972 error: invalid Log::delay() call: active write mismatch +1362692527.080972 error: invalid Log::delay() call: argument mismatch with active Log::write() diff --git a/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors-6/.stderr b/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors-6/.stderr new file mode 100644 index 0000000000..2087442926 --- /dev/null +++ b/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors-6/.stderr @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +1362692527.080972 error: invalid Log::delay() call: outside of Log::log_stream_policy() hook +1362692527.080972 error: invalid Log::delay_finish() call: invalid token provided diff --git a/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors/.stderr b/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors/.stderr index f6c79f1e6a..eab4cf6651 100644 --- a/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors/.stderr +++ b/testing/btest/Baseline/scripts.base.frameworks.logging.delay.errors/.stderr @@ -1,2 +1,3 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -error: invalid Log::delay() call: no active write context available +error: invalid Log::delay() call: outside of Log::log_stream_policy() hook +error: invalid Log::delay_finish() call: invalid token provided diff --git a/testing/btest/scripts/base/frameworks/logging/delay/errors.zeek b/testing/btest/scripts/base/frameworks/logging/delay/errors.zeek index 113c4b992c..fab379de87 100644 --- a/testing/btest/scripts/base/frameworks/logging/delay/errors.zeek +++ b/testing/btest/scripts/base/frameworks/logging/delay/errors.zeek @@ -5,10 +5,17 @@ redef enum Log::ID += { LOG }; +type Info: record { + ts: time &log &default=network_time(); +}; + event zeek_init() { - # Not within a log write - Log::delay(LOG, []); + # Log::delay() not within a Log::log_stream_policy hook + Log::create_stream(LOG, [$columns=Info]); + local rec = Info(); + local token = Log::delay(LOG, rec); + Log::delay_finish(LOG, rec, token); } @TEST-START-NEXT @@ -50,3 +57,13 @@ hook Log::log_stream_policy(rec: Conn::Info, id: Log::ID) Log::delay_finish(id, rec, token); Log::delay_finish(id, rec, token); } + +@TEST-START-NEXT +@load base/protocols/conn + +hook Conn::log_policy(rec: Conn::Info, id: Log::ID, filter: Log::Filter) + { + # Calling Log::delay() in a filter policy hook is an error. + local token = Log::delay(id, rec); + Log::delay_finish(id, rec, token); + }