]> granicus.if.org Git - icinga2/commitdiff
Use a separate scope for "for" loops.
authorGunnar Beutner <gunnar@beutner.name>
Sat, 10 May 2014 10:03:54 +0000 (12:03 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Sat, 10 May 2014 10:03:54 +0000 (12:03 +0200)
Refs #6183

lib/config/aexpression.cpp

index 6295aab2ab15603914d36d39516b04e67bdf590b..be027f9565eac62b04046ba12f15e476f7862688 100644 (file)
@@ -586,11 +586,12 @@ Value AExpression::OpFor(const AExpression* expr, const Dictionary::Ptr& locals)
 
        ObjectLock olock(arr);
        BOOST_FOREACH(const Value& value, arr) {
-               locals->Set(varname, value);
-               ascope->Evaluate(locals);
-       }
+               Dictionary::Ptr xlocals = make_shared<Dictionary>();
+               xlocals->Set("__parent", locals);
+               xlocals->Set(varname, value);
 
-       locals->Remove(varname);
+               ascope->Evaluate(xlocals);
+       }
 
        return Empty;
 }