mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2025-06-07 22:07:23 +02:00
station: fix setting an empty affinities list
A prior patch broke this by checking the return of l_dbus_message_iter_next_entry. This was really subtle but the logic actually relied on _not_ checking that return in order to handle empty lists. Instead of reverting the logic was adapted/commented to make it more clear what the API expects from DBus. If list contains at least one value the first element path will get set, if it contains zero values "new_path" will be set to NULL which will then cause the list to be cleared later on. This both fixes the regression, and makes it clear that a zero element list is supported and handled.
This commit is contained in:
parent
4ded663e68
commit
8ebc4780ea
@ -4815,7 +4815,7 @@ static struct l_dbus_message *station_property_set_affinities(
|
|||||||
struct l_dbus_message_iter array;
|
struct l_dbus_message_iter array;
|
||||||
const char *sender = l_dbus_message_get_sender(message);
|
const char *sender = l_dbus_message_get_sender(message);
|
||||||
char *old_path = l_queue_peek_head(station->affinities);
|
char *old_path = l_queue_peek_head(station->affinities);
|
||||||
const char *new_path = NULL;
|
const char *new_path;
|
||||||
struct scan_bss *new_bss = NULL;
|
struct scan_bss *new_bss = NULL;
|
||||||
struct scan_bss *old_bss = NULL;
|
struct scan_bss *old_bss = NULL;
|
||||||
bool lower_threshold = false;
|
bool lower_threshold = false;
|
||||||
@ -4835,11 +4835,15 @@ static struct l_dbus_message *station_property_set_affinities(
|
|||||||
if (!l_dbus_message_iter_get_variant(new_value, "ao", &array))
|
if (!l_dbus_message_iter_get_variant(new_value, "ao", &array))
|
||||||
return dbus_error_invalid_args(message);
|
return dbus_error_invalid_args(message);
|
||||||
|
|
||||||
/* Get first entry, there should be only one */
|
/* Get first entry, or if an empty array set the path to NULL */
|
||||||
if (!l_dbus_message_iter_next_entry(&array, &new_path))
|
if (!l_dbus_message_iter_next_entry(&array, &new_path))
|
||||||
return dbus_error_invalid_args(message);
|
new_path = NULL;
|
||||||
|
|
||||||
if (l_dbus_message_iter_next_entry(&array, &new_path))
|
/*
|
||||||
|
* Only allowing single values for now. If there is more than a single
|
||||||
|
* value, fail
|
||||||
|
*/
|
||||||
|
if (new_path && l_dbus_message_iter_next_entry(&array, &new_path))
|
||||||
return dbus_error_invalid_args(message);
|
return dbus_error_invalid_args(message);
|
||||||
|
|
||||||
old_path = l_queue_peek_head(station->affinities);
|
old_path = l_queue_peek_head(station->affinities);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user