summaryrefslogtreecommitdiffstats
path: root/tests/auto/qdbusinterface
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@nokia.com>2010-04-29 11:14:09 (GMT)
committerThiago Macieira <thiago.macieira@nokia.com>2010-04-29 11:19:16 (GMT)
commitce3d9fb3b3ec1f23d76b04a8593680d7eeee689d (patch)
treefebf82fb0fbb7178c8598304c8a83abc1724a9a6 /tests/auto/qdbusinterface
parent78e8af4fea3cc527b0dc5ace5a4c4445f044c2cd (diff)
downloadQt-ce3d9fb3b3ec1f23d76b04a8593680d7eeee689d.zip
Qt-ce3d9fb3b3ec1f23d76b04a8593680d7eeee689d.tar.gz
Qt-ce3d9fb3b3ec1f23d76b04a8593680d7eeee689d.tar.bz2
Fix crash in QDBusInterface when invoking a method in a derived class.
If metaObject is 0 and the signal or slot is in a class deriving from QDBusInterface, this would lead to a crash. Deriving from QDBusInterface is very unusual and usually indicates misunderstanding of QtDBus, but the fix is correct. Task-number: https://projects.maemo.org/bugzilla/show_bug.cgi?id=165175 Patch-By: Maemo developer Reviewed-by: Thiago Macieira <thiago.macieira@nokia.com>
Diffstat (limited to 'tests/auto/qdbusinterface')
-rw-r--r--tests/auto/qdbusinterface/tst_qdbusinterface.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/auto/qdbusinterface/tst_qdbusinterface.cpp b/tests/auto/qdbusinterface/tst_qdbusinterface.cpp
index 826bd70..d8ff2d3 100644
--- a/tests/auto/qdbusinterface/tst_qdbusinterface.cpp
+++ b/tests/auto/qdbusinterface/tst_qdbusinterface.cpp
@@ -157,6 +157,18 @@ public slots:
}
};
+class DerivedFromQDBusInterface: public QDBusInterface
+{
+ Q_OBJECT
+public:
+ DerivedFromQDBusInterface()
+ : QDBusInterface("com.example.Test", "/")
+ {}
+
+public slots:
+ void method() {}
+};
+
// helper function
void emitSignal(const QString &interface, const QString &name, const QString &arg)
{
@@ -183,6 +195,7 @@ private slots:
void notConnected();
void notValid();
+ void notValidDerived();
void invalidAfterServiceOwnerChanged();
void introspect();
void callMethod();
@@ -219,6 +232,7 @@ void tst_QDBusInterface::notConnected()
connection);
QVERIFY(!interface.isValid());
+ QVERIFY(!QMetaObject::invokeMethod(&interface, "ListNames", Qt::DirectConnection));
}
void tst_QDBusInterface::notValid()
@@ -230,6 +244,14 @@ void tst_QDBusInterface::notValid()
connection);
QVERIFY(!interface.isValid());
+ QVERIFY(!QMetaObject::invokeMethod(&interface, "ListNames", Qt::DirectConnection));
+}
+
+void tst_QDBusInterface::notValidDerived()
+{
+ DerivedFromQDBusInterface c;
+ QVERIFY(!c.isValid());
+ QMetaObject::invokeMethod(&c, "method", Qt::DirectConnection);
}
void tst_QDBusInterface::invalidAfterServiceOwnerChanged()