mirror of
https://github.com/zeek/zeek.git
synced 2025-10-10 18:48:20 +00:00
Merge remote-tracking branch 'origin/topic/johanna/global_frame_stack'
Additionally changed to pop call_stack which tracks related data. * origin/topic/johanna/global_frame_stack: Pop global frame stack on exception.
This commit is contained in:
commit
36557f3086
3 changed files with 21 additions and 1 deletions
18
CHANGES
18
CHANGES
|
@ -1,4 +1,22 @@
|
||||||
|
|
||||||
|
3.2.0-dev.159 | 2020-02-26 19:51:24 -0800
|
||||||
|
|
||||||
|
* Pop global frame stack on exception. (Johanna Amann, Corelight)
|
||||||
|
|
||||||
|
When changing this code for 3.0.0, the code-flow changed significantly.
|
||||||
|
One of the changes lead to exception being re-thrown from Call - which
|
||||||
|
leads to the function cleanup not always being run. While the Unref of
|
||||||
|
the framepointer was (correctly) moved into the catch block, the global
|
||||||
|
frame stack was not cleaned up - and contains an invalid pointer after
|
||||||
|
encountering an interpreter exception.
|
||||||
|
|
||||||
|
This small commit pops the stack and removes the framepointer that was
|
||||||
|
pushed onto it before re-throwing the exception.
|
||||||
|
|
||||||
|
I also think that this change (re-throwing the exception) breaks the
|
||||||
|
Zeek debugger in significant ways (you cannot debug a script that causes
|
||||||
|
a Runtime error anymore).
|
||||||
|
|
||||||
3.2.0-dev.157 | 2020-02-26 10:04:32 -0800
|
3.2.0-dev.157 | 2020-02-26 10:04:32 -0800
|
||||||
|
|
||||||
* IntrusivePtr: overload std::swap() (Max Kellermann)
|
* IntrusivePtr: overload std::swap() (Max Kellermann)
|
||||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
3.2.0-dev.157
|
3.2.0-dev.159
|
||||||
|
|
|
@ -395,6 +395,8 @@ Val* BroFunc::Call(val_list* args, Frame* parent) const
|
||||||
// Already reported, but now determine whether to unwind further.
|
// Already reported, but now determine whether to unwind further.
|
||||||
if ( Flavor() == FUNC_FLAVOR_FUNCTION )
|
if ( Flavor() == FUNC_FLAVOR_FUNCTION )
|
||||||
{
|
{
|
||||||
|
g_frame_stack.pop_back();
|
||||||
|
call_stack.pop_back();
|
||||||
Unref(f);
|
Unref(f);
|
||||||
// Result not set b/c exception was thrown
|
// Result not set b/c exception was thrown
|
||||||
throw;
|
throw;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue