mirror of
https://github.com/zeek/zeek.git
synced 2025-10-13 03:58:20 +00:00
Fix memory leak in Zeek when-statement bodies with runtime errors
This commit is contained in:
parent
b045ce4bb3
commit
94656c2308
2 changed files with 19 additions and 6 deletions
|
@ -321,9 +321,14 @@ bool Trigger::Eval()
|
|||
delete [] pname;
|
||||
#endif
|
||||
|
||||
trigger->Cache(frame->GetCall(), v.get());
|
||||
auto queued = trigger->Cache(frame->GetCall(), v.get());
|
||||
trigger->Release();
|
||||
frame->ClearTrigger();
|
||||
|
||||
if ( ! queued && trigger->TimeoutValue() < 0 )
|
||||
// Usually the parent-trigger would get unref'd either by
|
||||
// its Eval() or its eventual Timeout(), but has neither
|
||||
Unref(trigger);
|
||||
}
|
||||
|
||||
Unref(f);
|
||||
|
@ -368,9 +373,14 @@ void Trigger::Timeout()
|
|||
DBG_LOG(DBG_NOTIFIERS, "%s: trigger has parent %s, caching timeout result", Name(), pname);
|
||||
delete [] pname;
|
||||
#endif
|
||||
trigger->Cache(frame->GetCall(), v.get());
|
||||
auto queued = trigger->Cache(frame->GetCall(), v.get());
|
||||
trigger->Release();
|
||||
frame->ClearTrigger();
|
||||
|
||||
if ( ! queued && trigger->TimeoutValue() < 0 )
|
||||
// Usually the parent-trigger would get unref'd either by
|
||||
// its Eval() or its eventual Timeout(), but has neither
|
||||
Unref(trigger);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -429,10 +439,10 @@ void Trigger::Attach(Trigger *trigger)
|
|||
Hold();
|
||||
}
|
||||
|
||||
void Trigger::Cache(const CallExpr* expr, Val* v)
|
||||
bool Trigger::Cache(const CallExpr* expr, Val* v)
|
||||
{
|
||||
if ( disabled || ! v )
|
||||
return;
|
||||
return false;
|
||||
|
||||
ValCache::iterator i = cache.find(expr);
|
||||
|
||||
|
@ -448,6 +458,7 @@ void Trigger::Cache(const CallExpr* expr, Val* v)
|
|||
Ref(v);
|
||||
|
||||
trigger_mgr->Queue(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue