pipewire: module-rt: make dbus reply checking stricter

org.freedesktop.DBus.Properties.Get is supposed to return
a single variant, so check if it does.
This commit is contained in:
Barnabás Pőcze 2024-02-04 16:38:54 +01:00 committed by Wim Taymans
parent 4da82d5475
commit db3d7b88dd

View file

@ -342,7 +342,6 @@ static long long rtkit_get_int_property(struct impl *impl, const char *propname,
DBusMessageIter iter, subiter; DBusMessageIter iter, subiter;
dbus_int64_t i64; dbus_int64_t i64;
dbus_int32_t i32; dbus_int32_t i32;
int current_type;
struct pw_rtkit_bus *connection = impl->rtkit_bus; struct pw_rtkit_bus *connection = impl->rtkit_bus;
if (!(m = dbus_message_new_method_call(impl->service_name, if (!(m = dbus_message_new_method_call(impl->service_name,
@ -365,34 +364,30 @@ static long long rtkit_get_int_property(struct impl *impl, const char *propname,
if (dbus_set_error_from_message(&error, r)) if (dbus_set_error_from_message(&error, r))
return translate_error(error.name); return translate_error(error.name);
if (!dbus_message_has_signature(r, "v"))
return -EBADMSG;
dbus_message_iter_init(r, &iter); dbus_message_iter_init(r, &iter);
while ((current_type = dbus_message_iter_get_arg_type(&iter)) != DBUS_TYPE_INVALID) {
if (current_type == DBUS_TYPE_VARIANT) { if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
dbus_message_iter_recurse(&iter, &subiter); return -EBADMSG;
while ((current_type = dbus_message_iter_recurse(&iter, &subiter);
dbus_message_iter_get_arg_type(&subiter)) != DBUS_TYPE_INVALID) {
if (current_type == DBUS_TYPE_INT32) { switch (dbus_message_iter_get_arg_type(&subiter)) {
dbus_message_iter_get_basic(&subiter, &i32); case DBUS_TYPE_INT32:
*propval = i32; dbus_message_iter_get_basic(&subiter, &i32);
return 0; *propval = i32;
} break;
case DBUS_TYPE_INT64:
if (current_type == DBUS_TYPE_INT64) { dbus_message_iter_get_basic(&subiter, &i64);
dbus_message_iter_get_basic(&subiter, &i64); *propval = i64;
*propval = i64; break;
return 0; default:
} return -EBADMSG;
dbus_message_iter_next(&subiter);
}
}
dbus_message_iter_next(&iter);
} }
return -EBADMSG; return 0;
} }
static int pw_rtkit_make_realtime(struct impl *impl, pid_t thread, int priority) static int pw_rtkit_make_realtime(struct impl *impl, pid_t thread, int priority)