From 7955c58bcaafbf6e940187703650e29a55cffd8c Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 18 Oct 2024 08:23:56 -0700 Subject: [PATCH] QDBusUtil::isValidBusName: implement "contains at least two such elements" It was in our docs but we didn't implement it. This failure allowed QDBusMessagePrivate::toDBusMessage() to proceed in calling libdbus-1 methods, which had the validation and might crash the application. Pick-to: 6.5 6.2 Fixes: QTBUG-130304 Change-Id: Ibb5d210c03672a363016fffd7b1a2b55c02119bd Reviewed-by: Ahmad Samir (cherry picked from commit f42f5b56140342238c325a014fbe8e179eff4348) Reviewed-by: Qt Cherry-pick Bot --- src/dbus/qdbusutil.cpp | 2 ++ tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/dbus/qdbusutil.cpp b/src/dbus/qdbusutil.cpp index 78338aa0545..84ce5ed78dc 100644 --- a/src/dbus/qdbusutil.cpp +++ b/src/dbus/qdbusutil.cpp @@ -407,6 +407,8 @@ namespace QDBusUtil return isValidUniqueConnectionName(busName); const auto parts = QStringView{busName}.split(u'.'); + if (parts.size() < 2) + return false; for (QStringView part : parts) { if (part.isEmpty()) return false; diff --git a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp index 355a65bc594..82dc9059e02 100644 --- a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp +++ b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp @@ -938,6 +938,10 @@ void tst_QDBusMarshall::sendCallErrors_data() << "org.freedesktop.DBus.Error.UnknownMethod" << "Method \"ping\" with signature \"\" on interface \"org.qtproject.autotests.qpong\" doesn't exist\n" << (const char*)0; + QTest::newRow("invalid-service-single-label") << "service" << objectPath << interfaceName << "ping" << QVariantList() + << "org.qtproject.QtDBus.Error.InvalidService" + << "Invalid service name: service" << ""; + QTest::newRow("invalid-service") << "this isn't valid" << objectPath << interfaceName << "ping" << QVariantList() << "org.qtproject.QtDBus.Error.InvalidService" << "Invalid service name: this isn't valid" << "";