diff options
author | Ivan Komissarov <abbapoh@gmail.com> | 2022-10-23 17:24:51 +0300 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2022-10-25 15:38:42 +0000 |
commit | cb3bcd0c65f18b236e84061a222d98c288638c09 (patch) | |
tree | a6979df647382f179030d65e29505bba65cb3b0a | |
parent | d86c0e041de0deffd3733c7df58f3ab848265a51 (diff) | |
download | qbs-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.js | 13 |
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; } |