Fix incorrect return value for the macro() function

fixes #9584
This commit is contained in:
Gunnar Beutner 2015-07-13 08:25:19 +02:00
parent 43e482f4ed
commit 8dedd47b89
1 changed files with 8 additions and 2 deletions

View File

@ -278,11 +278,12 @@ Value MacroProcessor::InternalResolveMacros(const String& str, const ResolverLis
}
resolved_macro = resolved_arr;
} else
} else if (resolved_macro.IsString()) {
resolved_macro = InternalResolveMacros(resolved_macro,
resolvers, cr, missingMacro, EscapeCallback(), Dictionary::Ptr(),
false, recursionLevel + 1);
}
}
if (!useResolvedMacros && found && resolvedMacros)
resolvedMacros->Set(name, resolved_macro);
@ -290,7 +291,12 @@ Value MacroProcessor::InternalResolveMacros(const String& str, const ResolverLis
if (escapeFn)
resolved_macro = escapeFn(resolved_macro);
/* we're done if the value is an array */
/* we're done if this is the only macro and there are no other non-macro parts in the string */
if (pos_first == 0 && pos_second == str.GetLength() - 1)
return resolved_macro;
else if (resolved_macro.IsObjectType<Array>())
BOOST_THROW_EXCEPTION(std::invalid_argument("Mixing both strings and non-strings in macros is not allowed."));
if (resolved_macro.IsObjectType<Array>()) {
/* don't allow mixing strings and arrays in macro strings */
if (pos_first != 0 || pos_second != str.GetLength() - 1)