D-Bus: Make WPAS_DBUS_TYPE_BINARRAY value less confusing
[mech_eap.git] / wpa_supplicant / dbus / dbus_dict_helpers.c
index 61a9430..0020a85 100644 (file)
@@ -465,7 +465,7 @@ dbus_bool_t wpa_dbus_dict_begin_array(DBusMessageIter *iter_dict,
        err = os_snprintf(array_type, sizeof(array_type),
                          DBUS_TYPE_ARRAY_AS_STRING "%s",
                          type);
-       if (err < 0 || err > (int) sizeof(array_type))
+       if (os_snprintf_error(sizeof(array_type), err))
                return FALSE;
 
        if (!iter_dict || !iter_dict_entry || !iter_dict_val || !iter_array)
@@ -858,13 +858,18 @@ static dbus_bool_t _wpa_dbus_dict_entry_get_binarray(
        size_t buflen = 0;
        int i;
 
-       if (dbus_message_iter_get_element_type(iter) != DBUS_TYPE_BYTE)
-               return FALSE;
-
        entry->array_type = WPAS_DBUS_TYPE_BINARRAY;
        entry->array_len = 0;
        entry->binarray_value = NULL;
 
+       if (dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_INVALID) {
+               /* Likely an empty array of arrays */
+               return TRUE;
+       }
+
+       if (dbus_message_iter_get_element_type(iter) != DBUS_TYPE_BYTE)
+               return FALSE;
+
        while (dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_ARRAY) {
                DBusMessageIter iter_array;
 
@@ -881,6 +886,8 @@ static dbus_bool_t _wpa_dbus_dict_entry_get_binarray(
                }
 
                dbus_message_iter_recurse(iter, &iter_array);
+               os_memset(&tmpentry, 0, sizeof(tmpentry));
+               tmpentry.type = DBUS_TYPE_ARRAY;
                if (_wpa_dbus_dict_entry_get_byte_array(&iter_array, &tmpentry)
                                        == FALSE)
                        goto cleanup;
@@ -932,6 +939,7 @@ static dbus_bool_t _wpa_dbus_dict_entry_get_array(
                break;
        case DBUS_TYPE_ARRAY:
                success = _wpa_dbus_dict_entry_get_binarray(&iter_array, entry);
+               break;
        default:
                break;
        }