From 37ee193c40c0fb2e80ce458f7b38d3573d6e9085 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 27 Apr 2026 22:11:34 +0800 Subject: [PATCH] DBus: improves message handling --- src/common/impl/dbus.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/common/impl/dbus.c b/src/common/impl/dbus.c index e8ef68fdd..dfd8b87df 100644 --- a/src/common/impl/dbus.c +++ b/src/common/impl/dbus.c @@ -76,7 +76,7 @@ bool ffDBusGetString(FFDBusData* dbus, DBusMessageIter* iter, FFstrbuf* result) uint8_t value; dbus->lib->ffdbus_message_iter_get_basic(iter, &value); ffStrbufAppendC(result, (char) value); - return false; // Don't append a comma + return true; } if (argType != DBUS_TYPE_VARIANT && argType != DBUS_TYPE_ARRAY) { @@ -92,6 +92,25 @@ bool ffDBusGetString(FFDBusData* dbus, DBusMessageIter* iter, FFstrbuf* result) // At this point we have an array + int subArgType = dbus->lib->ffdbus_message_iter_get_arg_type(&subIter); + if (subArgType == DBUS_TYPE_INVALID) { + return false; + } + + if (subArgType == DBUS_TYPE_BYTE) { + while (true) { + uint8_t value; + dbus->lib->ffdbus_message_iter_get_basic(&subIter, &value); + ffStrbufAppendC(result, (char) value); + + if (!dbus->lib->ffdbus_message_iter_next(&subIter)) { + break; + } + } + + return true; + } + bool foundAValue = false; while (true) { @@ -189,12 +208,17 @@ bool ffDBusGetInt(FFDBusData* dbus, DBusMessageIter* iter, int32_t* result) { if (argType == DBUS_TYPE_UINT16) { uint16_t value = 0; dbus->lib->ffdbus_message_iter_get_basic(iter, &value); - *result = (int16_t) value; + *result = (int32_t) value; return true; } if (argType == DBUS_TYPE_UINT32) { - dbus->lib->ffdbus_message_iter_get_basic(iter, result); + uint32_t value = 0; + dbus->lib->ffdbus_message_iter_get_basic(iter, &value); + if (value > 0x7FFFFFFFu) { + return false; + } + *result = (int32_t) value; return true; }