aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2016-08-25 17:05:12 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2016-08-26 07:47:11 +0000
commitee6d55dd955382b70228f469e785243761aa658d (patch)
treee08f66355a3524a48437535aca9027e4c847a202
parentc1732882bc616c3607306ef71fe8055fe7e760f3 (diff)
Do not allow "static" JS extension classes to be instantiated
Apart from it being weird that people can instantiate them, it also makes us crash. Task-number: QBS-1009 Change-Id: Ic10ab530484df973b569aa5a185c06274ad2fef1 Reviewed-by: Jake Petroules <jake.petroules@qt.io>
-rw-r--r--src/lib/corelib/jsextensions/environmentextension.cpp4
-rw-r--r--src/lib/corelib/jsextensions/file.cpp4
-rw-r--r--src/lib/corelib/jsextensions/fileinfoextension.cpp4
-rw-r--r--src/lib/corelib/jsextensions/utilitiesextension.cpp4
-rw-r--r--tests/auto/blackbox/testdata/invalid-extension-instantiation/invalid-extension-instantiation.qbs27
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp23
-rw-r--r--tests/auto/blackbox/tst_blackbox.h2
7 files changed, 56 insertions, 12 deletions
diff --git a/src/lib/corelib/jsextensions/environmentextension.cpp b/src/lib/corelib/jsextensions/environmentextension.cpp
index 56c60653b..e38c065d2 100644
--- a/src/lib/corelib/jsextensions/environmentextension.cpp
+++ b/src/lib/corelib/jsextensions/environmentextension.cpp
@@ -73,10 +73,8 @@ void initializeJsExtensionEnvironment(QScriptValue extensionObject)
QScriptValue EnvironmentExtension::js_ctor(QScriptContext *context, QScriptEngine *engine)
{
- // Add instance variables here etc., if needed.
- Q_UNUSED(context);
Q_UNUSED(engine);
- return true;
+ return context->throwError(Tr::tr("'Environment' cannot be instantiated."));
}
static QProcessEnvironment *getProcessEnvironment(QScriptContext *context, QScriptEngine *engine,
diff --git a/src/lib/corelib/jsextensions/file.cpp b/src/lib/corelib/jsextensions/file.cpp
index 40e9f2034..da19f5181 100644
--- a/src/lib/corelib/jsextensions/file.cpp
+++ b/src/lib/corelib/jsextensions/file.cpp
@@ -110,10 +110,8 @@ void initializeJsExtensionFile(QScriptValue extensionObject)
QScriptValue File::js_ctor(QScriptContext *context, QScriptEngine *engine)
{
- // Add instance variables here etc., if needed.
- Q_UNUSED(context);
Q_UNUSED(engine);
- return true;
+ return context->throwError(Tr::tr("'File' cannot be instantiated."));
}
QScriptValue File::js_copy(QScriptContext *context, QScriptEngine *engine)
diff --git a/src/lib/corelib/jsextensions/fileinfoextension.cpp b/src/lib/corelib/jsextensions/fileinfoextension.cpp
index 245343e83..c9c879b3e 100644
--- a/src/lib/corelib/jsextensions/fileinfoextension.cpp
+++ b/src/lib/corelib/jsextensions/fileinfoextension.cpp
@@ -99,10 +99,8 @@ void initializeJsExtensionFileInfo(QScriptValue extensionObject)
QScriptValue FileInfoExtension::js_ctor(QScriptContext *context, QScriptEngine *engine)
{
- // Add instance variables here etc., if needed.
- Q_UNUSED(context);
Q_UNUSED(engine);
- return true;
+ return context->throwError(Tr::tr("'FileInfo' cannot be instantiated."));
}
QScriptValue FileInfoExtension::js_path(QScriptContext *context, QScriptEngine *engine)
diff --git a/src/lib/corelib/jsextensions/utilitiesextension.cpp b/src/lib/corelib/jsextensions/utilitiesextension.cpp
index adcfff770..13be6d9ec 100644
--- a/src/lib/corelib/jsextensions/utilitiesextension.cpp
+++ b/src/lib/corelib/jsextensions/utilitiesextension.cpp
@@ -108,10 +108,8 @@ void initializeJsExtensionUtilities(QScriptValue extensionObject)
QScriptValue UtilitiesExtension::js_ctor(QScriptContext *context, QScriptEngine *engine)
{
- // Add instance variables here etc., if needed.
- Q_UNUSED(context);
Q_UNUSED(engine);
- return true;
+ return context->throwError(Tr::tr("'Utilities' cannot be instantiated."));
}
QScriptValue UtilitiesExtension::js_canonicalArchitecture(QScriptContext *context,
diff --git a/tests/auto/blackbox/testdata/invalid-extension-instantiation/invalid-extension-instantiation.qbs b/tests/auto/blackbox/testdata/invalid-extension-instantiation/invalid-extension-instantiation.qbs
new file mode 100644
index 000000000..ad2f55da4
--- /dev/null
+++ b/tests/auto/blackbox/testdata/invalid-extension-instantiation/invalid-extension-instantiation.qbs
@@ -0,0 +1,27 @@
+import qbs
+import qbs.Environment
+import qbs.File
+import qbs.FileInfo
+import qbs.Utilities
+
+Product {
+ name: "theProduct"
+ type: ["mytype"]
+ property string extension
+
+ Rule {
+ multiplex: true
+ Artifact {
+ filePath: "dummy"
+ fileTags: product.type
+ }
+ prepare: {
+ var cmd = new JavaScriptCommand();
+ cmd.silent = true;
+ cmd.sourceCode = function() {
+ var f = eval("new " + product.extension);
+ };
+ return [cmd];
+ }
+ }
+}
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index a6581a5d9..784477986 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -2638,6 +2638,29 @@ void TestBlackbox::invalidCommandProperty()
QVERIFY2(m_qbsStderr.contains("unsuitable"), m_qbsStderr.constData());
}
+void TestBlackbox::invalidExtensionInstantiation()
+{
+ QDir::setCurrent(testDataDir + "/invalid-extension-instantiation");
+ QbsRunParameters params;
+ params.expectFailure = true;
+ params.arguments << (QString("theProduct.extension:") + QTest::currentDataTag());
+ QVERIFY(runQbs(params) != 0);
+ QVERIFY2(m_qbsStderr.contains("invalid-extension-instantiation.qbs:18")
+ && m_qbsStderr.contains('\'' + QByteArray(QTest::currentDataTag())
+ + "' cannot be instantiated"),
+ m_qbsStderr.constData());
+}
+
+void TestBlackbox::invalidExtensionInstantiation_data()
+{
+ QTest::addColumn<bool>("dummy");
+
+ QTest::newRow("Environment");
+ QTest::newRow("File");
+ QTest::newRow("FileInfo");
+ QTest::newRow("Utilities");
+}
+
static QProcessEnvironment processEnvironmentWithCurrentDirectoryInLibraryPath()
{
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h
index b05494243..5d70b8dc0 100644
--- a/tests/auto/blackbox/tst_blackbox.h
+++ b/tests/auto/blackbox/tst_blackbox.h
@@ -148,6 +148,8 @@ private slots:
void installPackage();
void installTree();
void invalidCommandProperty();
+ void invalidExtensionInstantiation();
+ void invalidExtensionInstantiation_data();
void java();
void javaDependencyTracking();
void jsExtensionsFile();