From ce4fb74ecd742abd01561bf90cd0d3b7174e7f4b Mon Sep 17 00:00:00 2001 From: David Faure Date: Wed, 21 Mar 2012 18:24:38 +0100 Subject: Fix assert in libdbus-1 from tst_qdbusmarshall. Serializing an empty object path was crashing with > arguments to dbus_message_iter_append_basic() were incorrect, > assertion "_dbus_check_is_valid_path (*string_p)" failed in file > dbus-message.c line 2555. Thiago says this depends on the libdbus build settings, which is why it didn't happen to everyone. OpenSUSE-12.1 here. Change-Id: I657d28d5d915706a22abfd273aad88d20e2d112a Reviewed-by: Thiago Macieira --- src/dbus/qdbusmarshaller.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/dbus') diff --git a/src/dbus/qdbusmarshaller.cpp b/src/dbus/qdbusmarshaller.cpp index 1f6ef99153..145d991e0e 100644 --- a/src/dbus/qdbusmarshaller.cpp +++ b/src/dbus/qdbusmarshaller.cpp @@ -124,19 +124,23 @@ void QDBusMarshaller::append(const QString &arg) inline void QDBusMarshaller::append(const QDBusObjectPath &arg) { QByteArray data = arg.path().toUtf8(); - if (!ba && data.isEmpty()) + if (!ba && data.isEmpty()) { error(QLatin1String("Invalid object path passed in arguments")); - const char *cdata = data.constData(); - qIterAppend(&iterator, ba, DBUS_TYPE_OBJECT_PATH, &cdata); + } else { + const char *cdata = data.constData(); + qIterAppend(&iterator, ba, DBUS_TYPE_OBJECT_PATH, &cdata); + } } inline void QDBusMarshaller::append(const QDBusSignature &arg) { QByteArray data = arg.signature().toUtf8(); - if (!ba && data.isEmpty()) + if (!ba && data.isEmpty()) { error(QLatin1String("Invalid signature passed in arguments")); - const char *cdata = data.constData(); - qIterAppend(&iterator, ba, DBUS_TYPE_SIGNATURE, &cdata); + } else { + const char *cdata = data.constData(); + qIterAppend(&iterator, ba, DBUS_TYPE_SIGNATURE, &cdata); + } } inline void QDBusMarshaller::append(const QDBusUnixFileDescriptor &arg) -- cgit v1.2.3