diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-10-19 11:34:46 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-10-19 14:20:40 +0000 |
commit | 19abf216fdd8a54c2b8ec101631f378ce6b5bc6d (patch) | |
tree | fd8968bc85b28c15791db4a918202968a456b7e9 | |
parent | c4b32aa4f8a863c2ed84db6d059b45441e622b58 (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.js | 14 | ||||
-rw-r--r-- | share/qbs/modules/cpp/msvc.js | 10 |
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"; |