aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2017-10-19 11:34:46 +0200
committerJoerg Bornemann <joerg.bornemann@qt.io>2017-10-19 14:20:40 +0000
commit19abf216fdd8a54c2b8ec101631f378ce6b5bc6d (patch)
treefd8968bc85b28c15791db4a918202968a456b7e9
parentc4b32aa4f8a863c2ed84db6d059b45441e622b58 (diff)
Check return values of sanitizedListProperty()
This function can return other things than Array objects. Check the return value before passing it to concat. This fixes evaluation errors in the following situation: Product A depends on product B, and - B provides staticlibrary or dynamiclibrary artifacts, and - B does not have a cpp dependency. Change-Id: Id59988ed8846564e0590be6dacdda154a59d0b61 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--share/qbs/modules/cpp/gcc.js14
-rw-r--r--share/qbs/modules/cpp/msvc.js10
2 files changed, 18 insertions, 6 deletions
diff --git a/share/qbs/modules/cpp/gcc.js b/share/qbs/modules/cpp/gcc.js
index 758c05de9..2ebb00456 100644
--- a/share/qbs/modules/cpp/gcc.js
+++ b/share/qbs/modules/cpp/gcc.js
@@ -114,19 +114,25 @@ function collectLibraryDependencies(product, isDarwin) {
}
function addExternalLibs(obj) {
+ function ensureArray(a) {
+ return Array.isArray(a) ? a : [];
+ }
+ function sanitizedModuleListProperty(obj, moduleName, propertyName) {
+ return ensureArray(ModUtils.sanitizedModuleProperty(obj, moduleName, propertyName));
+ }
var externalLibs = [].concat(
- ModUtils.sanitizedModuleProperty(obj, "cpp", "staticLibraries"),
- ModUtils.sanitizedModuleProperty(obj, "cpp", "dynamicLibraries"));
+ ensureArray(sanitizedModuleListProperty(obj, "cpp", "staticLibraries")),
+ ensureArray(sanitizedModuleListProperty(obj, "cpp", "dynamicLibraries")));
for (var i = 0, len = externalLibs.length; i < len; ++i)
addObject({ direct: true, filePath: externalLibs[i] }, Array.prototype.push);
if (isDarwin) {
externalLibs = [].concat(
- ModUtils.sanitizedModuleProperty(obj, "cpp", "frameworks"));
+ ensureArray(sanitizedModuleListProperty(obj, "cpp", "frameworks")));
for (var i = 0, len = externalLibs.length; i < len; ++i)
addObject({ direct: true, filePath: externalLibs[i], framework: true },
Array.prototype.push);
externalLibs = [].concat(
- ModUtils.sanitizedModuleProperty(obj, "cpp", "weakFrameworks"));
+ ensureArray(sanitizedModuleListProperty(obj, "cpp", "weakFrameworks")));
for (var i = 0, len = externalLibs.length; i < len; ++i)
addObject({ direct: true, filePath: externalLibs[i], framework: true,
symbolLinkMode: "weak" }, Array.prototype.push);
diff --git a/share/qbs/modules/cpp/msvc.js b/share/qbs/modules/cpp/msvc.js
index de99d63ef..2d111eb41 100644
--- a/share/qbs/modules/cpp/msvc.js
+++ b/share/qbs/modules/cpp/msvc.js
@@ -261,9 +261,15 @@ function collectLibraryDependencies(product) {
}
function addExternalLibs(obj) {
+ function ensureArray(a) {
+ return Array.isArray(a) ? a : [];
+ }
+ function sanitizedModuleListProperty(obj, moduleName, propertyName) {
+ return ensureArray(ModUtils.sanitizedModuleProperty(obj, moduleName, propertyName));
+ }
var externalLibs = [].concat(
- ModUtils.sanitizedModuleProperty(obj, "cpp", "staticLibraries"),
- ModUtils.sanitizedModuleProperty(obj, "cpp", "dynamicLibraries"));
+ sanitizedModuleListProperty(obj, "cpp", "staticLibraries"),
+ sanitizedModuleListProperty(obj, "cpp", "dynamicLibraries"));
externalLibs.forEach(function (libName) {
if (!libName.match(/\.lib$/i) && !libName.startsWith('@'))
libName += ".lib";