From 02df93a5bb7db2769f90d91a63b385750477d698 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Thu, 21 Apr 2022 14:13:04 +0300 Subject: [PATCH] do not duplicate the file-descriptor from QDBusUnixFileDescriptor constructor Signed-off-by: Ivailo Monev --- src/dbus/qdbusunixfiledescriptor.cpp | 7 ++----- tests/auto/qdbusmarshall/tst_qdbusmarshall.cpp | 21 +++++++++++++-------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/dbus/qdbusunixfiledescriptor.cpp b/src/dbus/qdbusunixfiledescriptor.cpp index a50717165..185aca5dd 100644 --- a/src/dbus/qdbusunixfiledescriptor.cpp +++ b/src/dbus/qdbusunixfiledescriptor.cpp @@ -118,9 +118,6 @@ QDBusUnixFileDescriptor::QDBusUnixFileDescriptor() fileDescriptor parameter. The original file descriptor is not touched and must be closed by the user. - Note that the value returned by fileDescriptor() will be different from - the \a fileDescriptor parameter passed. - If the \a fileDescriptor parameter is not valid, isValid() will return false and fileDescriptor() will return -1. @@ -130,7 +127,7 @@ QDBusUnixFileDescriptor::QDBusUnixFileDescriptor(int fileDescriptor) : d(0) { if (fileDescriptor != -1) - setFileDescriptor(fileDescriptor); + giveFileDescriptor(fileDescriptor); } /*! @@ -186,7 +183,7 @@ bool QDBusUnixFileDescriptor::isValid() const */ int QDBusUnixFileDescriptor::fileDescriptor() const { - return d ? d->fd.operator int() : -1; + return d ? d->fd.load() : -1; } /*! diff --git a/tests/auto/qdbusmarshall/tst_qdbusmarshall.cpp b/tests/auto/qdbusmarshall/tst_qdbusmarshall.cpp index 691574811..f7033bdeb 100644 --- a/tests/auto/qdbusmarshall/tst_qdbusmarshall.cpp +++ b/tests/auto/qdbusmarshall/tst_qdbusmarshall.cpp @@ -34,6 +34,13 @@ static const char serviceName[] = "com.trolltech.autotests.qpong"; static const char objectPath[] = "/com/trolltech/qpong"; static const char *interfaceName = serviceName; +static inline QDBusUnixFileDescriptor qDBusFD(const int fd) +{ + QDBusUnixFileDescriptor qdbusfd; + qdbusfd.setFileDescriptor(fd); + return qdbusfd; +} + class tst_QDBusMarshall: public QObject { Q_OBJECT @@ -160,7 +167,6 @@ void addBasicTypesColumns() void basicNumericTypes_data() { QTest::newRow("bool") << QVariant(false) << "b" << "false"; -#if 1 QTest::newRow("bool2") << QVariant(true) << "b" << "true"; QTest::newRow("byte") << qVariantFromValue(uchar(1)) << "y" << "1"; QTest::newRow("int16") << qVariantFromValue(short(2)) << "n" << "2"; @@ -190,8 +196,7 @@ void tst_QDBusMarshall::sendBasic_data() basicStringTypes_data(); if (fileDescriptorPassing) - QTest::newRow("file-descriptor") << qVariantFromValue(QDBusUnixFileDescriptor(fileDescriptorForTest())) << "h" << "[Unix FD: valid]"; -#endif + QTest::newRow("file-descriptor") << qVariantFromValue(qDBusFD(fileDescriptorForTest())) << "h" << "[Unix FD: valid]"; } void tst_QDBusMarshall::sendVariant_data() @@ -287,7 +292,7 @@ void tst_QDBusMarshall::sendArrays_data() if (fileDescriptorPassing) { QList fileDescriptors; QTest::newRow("emptyfiledescriptorlist") << qVariantFromValue(fileDescriptors) << "ah" << "[Argument: ah {}]"; - fileDescriptors << QDBusUnixFileDescriptor(fileDescriptorForTest()) << QDBusUnixFileDescriptor(1); + fileDescriptors << qDBusFD(fileDescriptorForTest()) << qDBusFD(1); QTest::newRow("filedescriptorlist") << qVariantFromValue(fileDescriptors) << "ah" << "[Argument: ah {[Unix FD: valid], [Unix FD: valid]}]"; } @@ -493,7 +498,7 @@ void tst_QDBusMarshall::sendMaps_data() << "[Argument: a{gs} {[Signature: a{gs}] = \"array of dict_entry of (signature, string)\", [Signature: i] = \"int32\", [Signature: s] = \"string\"}]"; if (fileDescriptorPassing) { - svmap["zzfiledescriptor"] = qVariantFromValue(QDBusUnixFileDescriptor(fileDescriptorForTest())); + svmap["zzfiledescriptor"] = qVariantFromValue(qDBusFD(fileDescriptorForTest())); QTest::newRow("sv-map1-fd") << qVariantFromValue(svmap) << "a{sv}" << "[Argument: a{sv} {\"a\" = [Variant(int): 1], \"b\" = [Variant(QByteArray): {99}], \"c\" = [Variant(QString): \"b\"], \"d\" = [Variant(uint): 42], \"e\" = [Variant(short): -47], \"f\" = [Variant: [Variant(int): 0]], \"zzfiledescriptor\" = [Variant(QDBusUnixFileDescriptor): [Unix FD: valid]]}]"; } @@ -554,7 +559,7 @@ void tst_QDBusMarshall::sendStructs_data() if (fileDescriptorPassing) { MyFileDescriptorStruct fds; - fds.fd = QDBusUnixFileDescriptor(fileDescriptorForTest()); + fds.fd = qDBusFD(fileDescriptorForTest()); QTest::newRow("fdstruct") << qVariantFromValue(fds) << "(h)" << "[Argument: (h) [Unix FD: valid]]"; QList fdlist; @@ -698,7 +703,7 @@ void tst_QDBusMarshall::sendArgument_data() if (fileDescriptorPassing) { arg = QDBusArgument(); - arg << QDBusUnixFileDescriptor(fileDescriptorForTest()); + arg << qDBusFD(fileDescriptorForTest()); QTest::newRow("filedescriptor") << qVariantFromValue(arg) << "h" << int(QDBusArgument::BasicType); } @@ -978,7 +983,7 @@ void tst_QDBusMarshall::sendCallErrors_data() // invalid file descriptor if (fileDescriptorPassing) { QTest::newRow("invalid-file-descriptor") << serviceName << objectPath << interfaceName << "ping" - << (QVariantList() << qVariantFromValue(QDBusUnixFileDescriptor(-1))) + << (QVariantList() << qVariantFromValue(qDBusFD(-1))) << "org.freedesktop.DBus.Error.Failed" << "Marshalling failed: Invalid file descriptor passed in arguments" << ""; -- 2.11.0