From a1d25670fc270ae1a159323e1ad050c1dc8447c1 Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Wed, 5 Jul 2023 17:10:38 -0700 Subject: [PATCH] Fix for nested "when" statements leading to confusion over scoping --- src/Var.cc | 14 ------------ .../btest/Baseline/language.when-scope/out | 3 +++ testing/btest/language/when-scope.zeek | 22 +++++++++++++++++++ 3 files changed, 25 insertions(+), 14 deletions(-) create mode 100644 testing/btest/Baseline/language.when-scope/out create mode 100644 testing/btest/language/when-scope.zeek diff --git a/src/Var.cc b/src/Var.cc index 5a327625a9..ef5a53ebad 100644 --- a/src/Var.cc +++ b/src/Var.cc @@ -767,7 +767,6 @@ class OuterIDBindingFinder : public TraversalCallback public: OuterIDBindingFinder(ScopePtr s) { scopes.emplace_back(s); } - TraversalCode PreStmt(const Stmt*) override; TraversalCode PreExpr(const Expr*) override; TraversalCode PostExpr(const Expr*) override; @@ -775,19 +774,6 @@ public: std::unordered_set outer_id_references; }; -TraversalCode OuterIDBindingFinder::PreStmt(const Stmt* stmt) - { - if ( stmt->Tag() != STMT_WHEN ) - return TC_CONTINUE; - - auto ws = static_cast(stmt); - - for ( auto& cl : ws->Info()->WhenExprLocals() ) - outer_id_references.insert(const_cast(cl.get())); - - return TC_ABORTSTMT; - } - TraversalCode OuterIDBindingFinder::PreExpr(const Expr* expr) { if ( expr->Tag() == EXPR_LAMBDA ) diff --git a/testing/btest/Baseline/language.when-scope/out b/testing/btest/Baseline/language.when-scope/out new file mode 100644 index 0000000000..782046f610 --- /dev/null +++ b/testing/btest/Baseline/language.when-scope/out @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +10.0.0.1 +10.0.0.2 diff --git a/testing/btest/language/when-scope.zeek b/testing/btest/language/when-scope.zeek new file mode 100644 index 0000000000..12903fab5d --- /dev/null +++ b/testing/btest/language/when-scope.zeek @@ -0,0 +1,22 @@ +# @TEST-DOC: Check for regression of "when" capture confusion over outer scope +# +# @TEST-EXEC: zeek -b %INPUT | sort >out +# @TEST-EXEC: btest-diff out + +module Test; + +event zeek_init() + { + local myset = set(10.0.0.1, 10.0.0.2); + + when [myset] (T) + { + for ( ip in myset ) + { + when [ip] ( ip == ip ) + { + print fmt("%s", ip); + } + } + } + }