summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Komissarov <abbapoh@gmail.com>2022-10-23 17:24:51 +0300
committerIvan Komissarov <ABBAPOH@gmail.com>2022-10-25 15:38:42 +0000
commitcb3bcd0c65f18b236e84061a222d98c288638c09 (patch)
treea6979df647382f179030d65e29505bba65cb3b0a
parentd86c0e041de0deffd3733c7df58f3ab848265a51 (diff)
downloadqbs-cb3bcd0c65f18b236e84061a222d98c288638c09.tar.gz
Workaround for the XCode 14 bug
It may happen that string is expanded to the the previously seen string via env: in {"FOO":"$(FOO$(BAR:identifier):default=YES)"} FOO refers to itself. Fixes: QBS-1711 Change-Id: I837a0dd2a9f08d9934dd20b1bff5576a53d84db6 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--share/qbs/imports/qbs/DarwinTools/darwin-tools.js13
1 files changed, 10 insertions, 3 deletions
diff --git a/share/qbs/imports/qbs/DarwinTools/darwin-tools.js b/share/qbs/imports/qbs/DarwinTools/darwin-tools.js
index 15f2c54ec..9f7d92e59 100644
--- a/share/qbs/imports/qbs/DarwinTools/darwin-tools.js
+++ b/share/qbs/imports/qbs/DarwinTools/darwin-tools.js
@@ -182,7 +182,7 @@ var PropertyListVariableExpander = (function () {
return { "syntax": syntax, "index": idx };
}
- function expandString(key, str, env) {
+ function expandString(key, str, env, seenVars) {
if (!str)
return str;
var repl = indexOfReplacementStart(syntaxes, str);
@@ -194,7 +194,14 @@ var PropertyListVariableExpander = (function () {
var varParts = str.slice(i + repl.syntax.open.length, j).split(':');
var varName = varParts[0];
var varFormatter = varParts[1];
- var varValue = expandString(key, env[varName], env);
+ var envValue = env[varName];
+ // if we end up expanding the same variable again, break the recursion
+ if (seenVars.indexOf(varName) !== -1)
+ envValue = "";
+ else
+ seenVars.push(varName);
+ var varValue = expandString(key, envValue, env, seenVars);
+ seenVars.pop();
if (undefined === varValue) {
// skip replacement
if ($this.undefinedVariableFunction)
@@ -229,7 +236,7 @@ var PropertyListVariableExpander = (function () {
}
if (type !== "string")
continue;
- var expandedValue = expandString(key, value, env);
+ var expandedValue = expandString(key, value, env, []);
if (expandedValue !== value)
obj[key] = expandedValue;
}