From db70fac5625086426c0ab558bda16f1dac27daab Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Wed, 28 Jan 2015 15:48:08 +0100 Subject: [PATCH] Fix incorrectly resolved macros refs #7564 --- lib/icinga/macroprocessor.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/icinga/macroprocessor.cpp b/lib/icinga/macroprocessor.cpp index fec5be3a492..2d7d39362fa 100644 --- a/lib/icinga/macroprocessor.cpp +++ b/lib/icinga/macroprocessor.cpp @@ -241,16 +241,19 @@ Value MacroProcessor::InternalResolveMacros(const String& str, const ResolverLis if (recursive_macro) { if (resolved_macro.IsObjectType()) { 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(),