mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
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:
parent
4da82d5475
commit
db3d7b88dd
1 changed files with 18 additions and 23 deletions
|
|
@ -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);
|
||||||
|
|
||||||
dbus_message_iter_init(r, &iter);
|
if (!dbus_message_has_signature(r, "v"))
|
||||||
while ((current_type = dbus_message_iter_get_arg_type(&iter)) != DBUS_TYPE_INVALID) {
|
return -EBADMSG;
|
||||||
|
|
||||||
|
dbus_message_iter_init(r, &iter);
|
||||||
|
|
||||||
|
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
|
||||||
|
return -EBADMSG;
|
||||||
|
|
||||||
if (current_type == DBUS_TYPE_VARIANT) {
|
|
||||||
dbus_message_iter_recurse(&iter, &subiter);
|
dbus_message_iter_recurse(&iter, &subiter);
|
||||||
|
|
||||||
while ((current_type =
|
switch (dbus_message_iter_get_arg_type(&subiter)) {
|
||||||
dbus_message_iter_get_arg_type(&subiter)) != DBUS_TYPE_INVALID) {
|
case DBUS_TYPE_INT32:
|
||||||
|
|
||||||
if (current_type == DBUS_TYPE_INT32) {
|
|
||||||
dbus_message_iter_get_basic(&subiter, &i32);
|
dbus_message_iter_get_basic(&subiter, &i32);
|
||||||
*propval = i32;
|
*propval = i32;
|
||||||
return 0;
|
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;
|
||||||
return 0;
|
break;
|
||||||
}
|
default:
|
||||||
|
|
||||||
dbus_message_iter_next(&subiter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dbus_message_iter_next(&iter);
|
|
||||||
}
|
|
||||||
|
|
||||||
return -EBADMSG;
|
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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue