From 9f67b185b8b99b02273eae81582653a831c8ec79 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Fri, 12 Aug 2016 11:42:59 +0200 Subject: [PATCH] Make sure all constructors properly initialize the ScriptFrame object refs #12408 --- lib/base/scriptframe.cpp | 21 ++++++++++++++------- lib/base/scriptframe.hpp | 2 ++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/base/scriptframe.cpp b/lib/base/scriptframe.cpp index 8c5c7b14e..6ea697c77 100644 --- a/lib/base/scriptframe.cpp +++ b/lib/base/scriptframe.cpp @@ -27,6 +27,17 @@ boost::thread_specific_ptr > ScriptFrame::m_ScriptFram ScriptFrame::ScriptFrame(void) : Locals(new Dictionary()), Self(ScriptGlobal::GetGlobals()), Sandboxed(false), Depth(0) +{ + InitializeFrame(); +} + +ScriptFrame::ScriptFrame(const Value& self) + : Locals(new Dictionary()), Self(self), Sandboxed(false), Depth(0) +{ + InitializeFrame(); +} + +void ScriptFrame::InitializeFrame(void) { std::stack *frames = m_ScriptFrames.get(); @@ -35,7 +46,9 @@ ScriptFrame::ScriptFrame(void) Sandboxed = frame->Sandboxed; Imports = frame->Imports; - } else { + } + + if (!Imports) { Imports = new Array(); Imports->Add(ScriptGlobal::Get("System")); } @@ -43,12 +56,6 @@ ScriptFrame::ScriptFrame(void) PushFrame(this); } -ScriptFrame::ScriptFrame(const Value& self) - : Locals(new Dictionary()), Self(self), Sandboxed(false), Depth(0) -{ - PushFrame(this); -} - ScriptFrame::~ScriptFrame(void) { ScriptFrame *frame = PopFrame(); diff --git a/lib/base/scriptframe.hpp b/lib/base/scriptframe.hpp index c0ceb3829..9827011a8 100644 --- a/lib/base/scriptframe.hpp +++ b/lib/base/scriptframe.hpp @@ -51,6 +51,8 @@ private: inline static void PushFrame(ScriptFrame *frame); inline static ScriptFrame *PopFrame(void); + + void InitializeFrame(void); }; }