From 84d0664e5c35c5be76596e845a25f3cdad914c9e Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Thu, 15 Aug 2024 11:37:57 +0200 Subject: [PATCH] CMakePM: Fix macro substitution recursion One could have a "PATH": "$env{PATH}" entry that would bring Qt Creator into infinite recursion. Change-Id: If2402b8e8550dc5be2435f4ca040f91ec239a06c Reviewed-by: Alessandro Portale --- src/plugins/cmakeprojectmanager/presetsmacros.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/presetsmacros.cpp b/src/plugins/cmakeprojectmanager/presetsmacros.cpp index bf02da3cba9..159e16f4551 100644 --- a/src/plugins/cmakeprojectmanager/presetsmacros.cpp +++ b/src/plugins/cmakeprojectmanager/presetsmacros.cpp @@ -101,7 +101,9 @@ static QString expandMacroEnv(const QString ¯oPrefix, do { done = true; for (qsizetype pos = 0; int len = findMacro(result, &pos, ¯oName);) { - result.replace(pos, len, op(macroName)); + const QString replacement = op(macroName); + // Prevent recursion by not allowing the same value to be reused + result.replace(pos, len, replacement != value ? replacement : ""); pos += macroName.length(); done = false; }