From f732ec3cb930e5b8d2a049fa955dc249302bff3a Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Wed, 5 Aug 2015 07:45:10 +0200 Subject: [PATCH] Fix: Dict initializer incorrectly re-initialized field that is set to an empty string fixes #9835 --- lib/config/expression.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/config/expression.cpp b/lib/config/expression.cpp index 7350a97ae..3b758dc49 100644 --- a/lib/config/expression.cpp +++ b/lib/config/expression.cpp @@ -604,8 +604,12 @@ bool IndexerExpression::GetReference(ScriptFrame& frame, bool init_dict, Value * psdhint = *dhint; if (m_Operand1->GetReference(frame, init_dict, &vparent, &vindex, &psdhint)) { - if (init_dict && VMOps::GetField(vparent, vindex, m_Operand1->GetDebugInfo()).IsEmpty()) - VMOps::SetField(vparent, vindex, new Dictionary(), m_Operand1->GetDebugInfo()); + if (init_dict) { + Value old_value = VMOps::GetField(vparent, vindex, m_Operand1->GetDebugInfo()); + + if (old_value.IsEmpty() && !old_value.IsString()) + VMOps::SetField(vparent, vindex, new Dictionary(), m_Operand1->GetDebugInfo()); + } *parent = VMOps::GetField(vparent, vindex, m_DebugInfo); free_psd = true;