aboutsummaryrefslogtreecommitdiffstats
path: root/share
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 /share
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>
Diffstat (limited to 'share')
-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";