From 9abf8ea8b722796b9e26fc5b1dc86ee61d3b19b5 Mon Sep 17 00:00:00 2001 From: Tim Wojtulewicz Date: Wed, 10 Apr 2024 16:10:26 -0700 Subject: [PATCH] Check for valid identifier in WhenStmt::Describe --- src/Stmt.cc | 5 ++++- .../out | 2 ++ .../when-local-function-capture-error.zeek | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 testing/btest/Baseline/language.when-local-function-capture-error/out create mode 100644 testing/btest/language/when-local-function-capture-error.zeek diff --git a/src/Stmt.cc b/src/Stmt.cc index d2def610c3..453e72cc12 100644 --- a/src/Stmt.cc +++ b/src/Stmt.cc @@ -2029,7 +2029,10 @@ void WhenStmt::StmtDescribe(ODesc* d) const { if ( c.IsDeepCopy() ) d->Add("copy "); - d->Add(c.Id()->Name()); + if ( c.Id() ) + d->Add(c.Id()->Name()); + else + d->Add(""); } d->Add("]"); } diff --git a/testing/btest/Baseline/language.when-local-function-capture-error/out b/testing/btest/Baseline/language.when-local-function-capture-error/out new file mode 100644 index 0000000000..9dd2161419 --- /dev/null +++ b/testing/btest/Baseline/language.when-local-function-capture-error/out @@ -0,0 +1,2 @@ +error in /Users/tim/Desktop/projects/zeek-master/testing/btest/.tmp/language.when-local-function-capture-error/when-local-function-capture-error.zeek, line 9: no such local identifier: z +error in /Users/tim/Desktop/projects/zeek-master/testing/btest/.tmp/language.when-local-function-capture-error/when-local-function-capture-error.zeek, lines 12-16: y is used inside "when" statement but not captured (when [x, ](T == T) { print hmm?, x, y} timeout 100.0 msecs { print timeout}) diff --git a/testing/btest/language/when-local-function-capture-error.zeek b/testing/btest/language/when-local-function-capture-error.zeek new file mode 100644 index 0000000000..199d3ed85f --- /dev/null +++ b/testing/btest/language/when-local-function-capture-error.zeek @@ -0,0 +1,17 @@ +# @TEST-DOC: Tests that a capture in a function that doesn't exist doesn't crash +# @TEST-EXEC-FAIL: zeek -b %INPUT >out 2>&1 +# @TeST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out + +function f() { + local x = 1; + local y = 2; + + when [x, z] ( T == T ) + { + print "hmm?", x, y; + } + timeout 100msec + { + print "timeout"; + } +}