summaryrefslogtreecommitdiff
path: root/debian/patches
diff options
context:
space:
mode:
authorFathi Boudra <fabo@kde.org>2009-12-21 16:01:34 +0100
committerFathi Boudra <fabo@kde.org>2009-12-21 16:01:34 +0100
commit76a2b124b625ea9faa09ed85e0873f0e5d17e995 (patch)
tree2019857a5a5b9bac42b9e855d4402878a7dd9750 /debian/patches
parent574190c9a4d6bae5df3476839fa0e983b720162c (diff)
downloadqt4-x11-76a2b124b625ea9faa09ed85e0873f0e5d17e995.tar.gz
Add 94_fix_crash_in_qdbuspendingreply_qdbusreply.diff patch to fix a crash
in QDBusPendingReply/QDBusReply in case of unconnected calls. (Closes: #560838)
Diffstat (limited to 'debian/patches')
-rw-r--r--debian/patches/94_fix_crash_in_qdbuspendingreply_qdbusreply.diff122
-rw-r--r--debian/patches/series2
2 files changed, 123 insertions, 1 deletions
diff --git a/debian/patches/94_fix_crash_in_qdbuspendingreply_qdbusreply.diff b/debian/patches/94_fix_crash_in_qdbuspendingreply_qdbusreply.diff
new file mode 100644
index 0000000..f3490b9
--- /dev/null
+++ b/debian/patches/94_fix_crash_in_qdbuspendingreply_qdbusreply.diff
@@ -0,0 +1,122 @@
+From 970f19bdb55cd559e9ef97228d30fd52b20e39cb Mon Sep 17 00:00:00 2001
+From: Thiago Macieira <thiago.macieira@nokia.com>
+Date: Tue, 8 Dec 2009 20:28:45 +0100
+Subject: [PATCH] Fix crash in QDBusPendingReply/QDBusReply in case of unconnected calls.
+
+If we made calls on a QDBusConnection that isn't connected, the d
+pointer is 0. Ensure we don't crash.
+
+Task-number: QTBUG-6571
+Reviewed-by: Bradley T. Hughes
+---
+ src/dbus/qdbuspendingcall.cpp | 2 +-
+ src/dbus/qdbuspendingreply.h | 1 +
+ .../qdbuspendingreply/tst_qdbuspendingreply.cpp | 25 ++++++++++++++++++++
+ tests/auto/qdbusreply/tst_qdbusreply.cpp | 16 ++++++++++++
+ 4 files changed, 43 insertions(+), 1 deletions(-)
+
+diff --git a/src/dbus/qdbuspendingcall.cpp b/src/dbus/qdbuspendingcall.cpp
+index d10179e..d8eb53e 100644
+--- a/src/dbus/qdbuspendingcall.cpp
++++ b/src/dbus/qdbuspendingcall.cpp
+@@ -310,7 +310,7 @@ QDBusPendingCall &QDBusPendingCall::operator=(const QDBusPendingCall &other)
+
+ bool QDBusPendingCall::isFinished() const
+ {
+- return d && (d->replyMessage.type() != QDBusMessage::InvalidMessage);
++ return !d || (d->replyMessage.type() != QDBusMessage::InvalidMessage);
+ }
+
+ void QDBusPendingCall::waitForFinished()
+diff --git a/src/dbus/qdbuspendingreply.h b/src/dbus/qdbuspendingreply.h
+index b7f54e4..4f90c98 100644
+--- a/src/dbus/qdbuspendingreply.h
++++ b/src/dbus/qdbuspendingreply.h
+@@ -188,6 +188,7 @@ public:
+ private:
+ inline void calculateMetaTypes()
+ {
++ if (!d) return;
+ int typeIds[Count > 0 ? Count : 1]; // use at least one since zero-sized arrays aren't valid
+ ForEach::fillMetaTypes(typeIds);
+ setMetaTypes(Count, typeIds);
+diff --git a/tests/auto/qdbuspendingreply/tst_qdbuspendingreply.cpp b/tests/auto/qdbuspendingreply/tst_qdbuspendingreply.cpp
+index 6398d9c..82e6389 100644
+--- a/tests/auto/qdbuspendingreply/tst_qdbuspendingreply.cpp
++++ b/tests/auto/qdbuspendingreply/tst_qdbuspendingreply.cpp
+@@ -93,6 +93,7 @@ private slots:
+ }
+
+ void init();
++ void unconnected();
+ void simpleTypes();
+ void complexTypes();
+ void wrongTypes();
+@@ -252,6 +253,30 @@ void tst_QDBusPendingReply::init()
+ QVERIFY(iface->isValid());
+ }
+
++void tst_QDBusPendingReply::unconnected()
++{
++ QDBusConnection con("invalid stored connection");
++ QVERIFY(!con.isConnected());
++ QDBusInterface iface("doesnt.matter", "/", "doesnt.matter", con);
++ QVERIFY(!iface.isValid());
++
++ QDBusPendingReply<> rvoid = iface.asyncCall("ReloadConfig");
++ QVERIFY(rvoid.isFinished());
++ QVERIFY(!rvoid.isValid());
++ QVERIFY(rvoid.isError());
++ rvoid.waitForFinished();
++ QVERIFY(!rvoid.isValid());
++ QVERIFY(rvoid.isError());
++
++ QDBusPendingReply<QString> rstring = iface.asyncCall("GetId");
++ QVERIFY(rstring.isFinished());
++ QVERIFY(!rstring.isValid());
++ QVERIFY(rstring.isError());
++ rstring.waitForFinished();
++ QVERIFY(!rstring.isValid());
++ QVERIFY(rstring.isError());
++}
++
+ void tst_QDBusPendingReply::simpleTypes()
+ {
+ QDBusPendingReply<> rvoid = iface->asyncCall("retrieveVoid");
+diff --git a/tests/auto/qdbusreply/tst_qdbusreply.cpp b/tests/auto/qdbusreply/tst_qdbusreply.cpp
+index 9866302..e36d288 100644
+--- a/tests/auto/qdbusreply/tst_qdbusreply.cpp
++++ b/tests/auto/qdbusreply/tst_qdbusreply.cpp
+@@ -93,6 +93,7 @@ private slots:
+ }
+
+ void init();
++ void unconnected();
+ void simpleTypes();
+ void complexTypes();
+ void wrongTypes();
+@@ -236,6 +237,21 @@ void tst_QDBusReply::init()
+ QVERIFY(iface->isValid());
+ }
+
++void tst_QDBusReply::unconnected()
++{
++ QDBusConnection con("invalid stored connection");
++ QVERIFY(!con.isConnected());
++ QDBusInterface iface("doesnt.matter", "/", "doesnt.matter", con);
++ QVERIFY(!iface.isValid());
++
++ QDBusReply<void> rvoid = iface.asyncCall("ReloadConfig");
++ QVERIFY(!rvoid.isValid());
++
++ QDBusReply<QString> rstring = iface.asyncCall("GetId");
++ QVERIFY(!rstring.isValid());
++ QVERIFY(rstring.value().isEmpty());
++}
++
+ void tst_QDBusReply::simpleTypes()
+ {
+ QDBusReply<bool> rbool = iface->call(QDBus::BlockWithGui, "retrieveBool");
+--
+1.6.1
+
diff --git a/debian/patches/series b/debian/patches/series
index 917a96f..d48feac 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -35,4 +35,4 @@
91_s390_-gstabs.diff
92_armel_gcc43_valist_compat.diff
93_jsvalue64_on_ia64.diff
-
+94_fix_crash_in_qdbuspendingreply_qdbusreply.diff