diff --git a/src/libs/utils/stringutils.cpp b/src/libs/utils/stringutils.cpp index 9861aa348e4..5024bd5ab57 100644 --- a/src/libs/utils/stringutils.cpp +++ b/src/libs/utils/stringutils.cpp @@ -126,6 +126,11 @@ int AbstractMacroExpander::findMacro(const QString &str, int *pos, QString *ret) if (closePos < 0) return 0; int varLen = closePos - varPos; + if (varLen == 0) { // replace "%{}" with "%" + *pos = openPos; + *ret = QString(QLatin1Char('%')); + return 3; + } if (resolveMacro(str.mid(varPos, varLen), ret)) { *pos = openPos; return varLen + 3; diff --git a/tests/auto/utils_stringutils/tst_stringutils.cpp b/tests/auto/utils_stringutils/tst_stringutils.cpp index 82a0fd7a999..289432cd287 100644 --- a/tests/auto/utils_stringutils/tst_stringutils.cpp +++ b/tests/auto/utils_stringutils/tst_stringutils.cpp @@ -42,6 +42,10 @@ public: *ret = QLatin1String("hi"); return true; } + if (name == QLatin1String("foo")) { + *ret = QLatin1String("a"); + return true; + } return false; } }; @@ -102,11 +106,17 @@ void tst_StringUtils::testMacroExpander_data() } vals[] = { { "text", "text" }, { "%{a}", "hi" }, + { "%%{a}", "%hi" }, + { "%%%{a}", "%%hi" }, + { "%{b}", "%{b}" }, { "pre%{a}", "prehi" }, { "%{a}post", "hipost" }, { "pre%{a}post", "prehipost" }, { "%{a}%{a}", "hihi" }, { "%{a}text%{a}", "hitexthi" }, + { "%{foo}%{a}text%{a}", "ahitexthi" }, + { "%{}{a}", "%{a}" }, + { "%{abc", "%{abc" } }; for (unsigned i = 0; i < sizeof(vals)/sizeof(vals[0]); i++)