]> granicus.if.org Git - icinga2/commitdiff
Fix incorrectly resolved macros
authorGunnar Beutner <gunnar@beutner.name>
Wed, 28 Jan 2015 14:48:08 +0000 (15:48 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Wed, 28 Jan 2015 14:48:08 +0000 (15:48 +0100)
refs #7564

lib/icinga/macroprocessor.cpp

index fec5be3a4926bad26fd28020a989cddd88769f47..2d7d39362fa6acea04f161e2d0e87dfecda547a3 100644 (file)
@@ -241,16 +241,19 @@ Value MacroProcessor::InternalResolveMacros(const String& str, const ResolverLis
                if (recursive_macro) {
                        if (resolved_macro.IsObjectType<Array>()) {
                                Array::Ptr arr = resolved_macro;
-                               Array::Ptr result = new Array();
+                               Array::Ptr resolved_arr = new Array();
 
                                ObjectLock olock(arr);
-                               BOOST_FOREACH(Value& value, arr) {
-                                       result->Add(InternalResolveMacros(value,
-                                               resolvers, cr, missingMacro, EscapeCallback(), Dictionary::Ptr(),
-                                               false, recursionLevel + 1));
+                               BOOST_FOREACH(const Value& value, arr) {
+                                       if (value.IsScalar()) {
+                                               resolved_arr->Add(InternalResolveMacros(value,
+                                                       resolvers, cr, missingMacro, EscapeCallback(), Dictionary::Ptr(),
+                                                       false, recursionLevel + 1));
+                                       } else
+                                               resolved_arr->Add(value);
                                }
 
-                               resolved_macro = result;
+                               resolved_macro = resolved_arr;
                        } else
                                resolved_macro = InternalResolveMacros(resolved_macro,
                                        resolvers, cr, missingMacro, EscapeCallback(), Dictionary::Ptr(),