crash fixes for constructs that expect add/delete expressions to return values

This commit is contained in:
Vern Paxson 2025-07-10 11:12:40 -07:00
parent eb6b4a0c46
commit df7ed20455
5 changed files with 24 additions and 5 deletions

View file

@ -220,9 +220,9 @@ bool Expr::CanAdd() const { return false; }
bool Expr::CanDel() const { return false; } bool Expr::CanDel() const { return false; }
TypePtr Expr::AddType() const { return nullptr; } TypePtr Expr::AddType() const { return base_type(TYPE_VOID); }
TypePtr Expr::DelType() const { return nullptr; } TypePtr Expr::DelType() const { return base_type(TYPE_VOID); }
ValPtr Expr::Add(Frame* /* f */) { Internal("Expr::Add called"); } ValPtr Expr::Add(Frame* /* f */) { Internal("Expr::Add called"); }

View file

@ -730,9 +730,10 @@ ExprPtr AddExpr::BuildSub(const ExprPtr& op1, const ExprPtr& op2) {
} }
ExprPtr AggrAddDelExpr::Reduce(Reducer* c, StmtPtr& red_stmt) { ExprPtr AggrAddDelExpr::Reduce(Reducer* c, StmtPtr& red_stmt) {
if ( type ) // In the future, if we use add/delete for list operations or such,
return UnaryExpr::Reduce(c, red_stmt); // then the following becomes germane.
// if ( type )
// return UnaryExpr::Reduce(c, red_stmt);
if ( c->Optimizing() ) if ( c->Optimizing() )
op = c->UpdateExpr(op); op = c->UpdateExpr(op);

View file

@ -0,0 +1,3 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
error in /Users/vern/warehouse/zeek/zeek-line-num/testing/btest/.tmp/language.add-del-expr-void/add-del-expr-void.zeek, line 11: can't assign void value (my_any1 = add my_set[3])
error in /Users/vern/warehouse/zeek/zeek-line-num/testing/btest/.tmp/language.add-del-expr-void/add-del-expr-void.zeek, line 12: can't assign void value (my_any2 = delete my_set[5])

View file

@ -0,0 +1 @@
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.

View file

@ -0,0 +1,14 @@
# @TEST-DOC: checks for type-checking for add/delete expressions
#
# @TEST-EXEC-FAIL: zeek -b %INPUT >out
# @TEST-EXEC: btest-diff out
# @TEST-EXEC: btest-diff .stderr
global my_set: set[count];
event zeek_init()
{
local my_any1: any = add my_set[3];
local my_any2: any = delete my_set[5];
print my_any1, my_any2;
}