From 28734daa06dd27c2e09f9c8ec506439af11389c9 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Thu, 18 Dec 2014 11:21:11 +0100 Subject: [PATCH] Fix crash when accessing invalid fields fixes #8104 --- lib/config/configitem.cpp | 3 ++- lib/config/expression.cpp | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/config/configitem.cpp b/lib/config/configitem.cpp index 43d1c124d..d71e370d3 100644 --- a/lib/config/configitem.cpp +++ b/lib/config/configitem.cpp @@ -165,7 +165,8 @@ DynamicObject::Ptr ConfigItem::Commit(bool discard) try { ScriptFrame frame(dobj); - frame.Locals = m_Scope; + if (m_Scope) + m_Scope->CopyTo(frame.Locals); m_Expression->Evaluate(frame, &debugHints); } catch (const ScriptError& ex) { ConfigCompilerContext::GetInstance()->AddMessage(true, ex.what(), ex.GetDebugInfo()); diff --git a/lib/config/expression.cpp b/lib/config/expression.cpp index c4ad058ca..3b4c7c77e 100644 --- a/lib/config/expression.cpp +++ b/lib/config/expression.cpp @@ -122,7 +122,7 @@ bool VariableExpression::GetReference(ScriptFrame& frame, bool init_dict, Value if (dhint) *dhint = NULL; } else - *parent = frame.Locals; + *parent = frame.Self; return true; } @@ -418,8 +418,8 @@ bool IndexerExpression::GetReference(ScriptFrame& frame, bool init_dict, Value * String vindex; if (m_Operand1->GetReference(frame, init_dict, &vparent, &vindex, dhint)) { - if (init_dict && VMOps::GetField(vparent, vindex).IsEmpty()) - VMOps::SetField(vparent, vindex, new Dictionary()); + if (init_dict && VMOps::GetField(vparent, vindex, m_Operand1->GetDebugInfo()).IsEmpty()) + VMOps::SetField(vparent, vindex, new Dictionary(), m_Operand1->GetDebugInfo()); *parent = VMOps::GetField(vparent, vindex, m_DebugInfo); } else