dbus: Clean up array-array-type property getter

The previously used design was a bit too complex for static analyzers
(e.g., CID 68131, CID 68133) to understand which resulted in false
warnings about uninitialized memory. Avoid this by explicitly
initializing the pointer array to NULL and also skipping any invalid
NULL entry in the helper function.

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2014-06-29 18:20:13 +03:00
parent ea18024d78
commit 010fc5f507
2 changed files with 7 additions and 5 deletions

View file

@ -512,7 +512,7 @@ dbus_bool_t wpas_dbus_simple_array_array_property_getter(DBusMessageIter *iter,
return FALSE; return FALSE;
} }
for (i = 0; i < array_len; i++) { for (i = 0; i < array_len && array[i]; i++) {
wpa_dbus_dict_bin_array_add_element(&array_iter, wpa_dbus_dict_bin_array_add_element(&array_iter,
wpabuf_head(array[i]), wpabuf_head(array[i]),
wpabuf_len(array[i])); wpabuf_len(array[i]));

View file

@ -1455,7 +1455,7 @@ dbus_bool_t wpas_dbus_getter_p2p_peer_vendor_extension(DBusMessageIter *iter,
void *user_data) void *user_data)
{ {
struct wpabuf *vendor_extension[P2P_MAX_WPS_VENDOR_EXT]; struct wpabuf *vendor_extension[P2P_MAX_WPS_VENDOR_EXT];
int i, num; unsigned int i, num = 0;
struct peer_handler_args *peer_args = user_data; struct peer_handler_args *peer_args = user_data;
const struct p2p_peer_info *info; const struct p2p_peer_info *info;
@ -1468,7 +1468,8 @@ dbus_bool_t wpas_dbus_getter_p2p_peer_vendor_extension(DBusMessageIter *iter,
} }
/* Add WPS vendor extensions attribute */ /* Add WPS vendor extensions attribute */
for (i = 0, num = 0; i < P2P_MAX_WPS_VENDOR_EXT; i++) { os_memset(vendor_extension, 0, sizeof(vendor_extension));
for (i = 0; i < P2P_MAX_WPS_VENDOR_EXT; i++) {
if (info->wps_vendor_ext[i] == NULL) if (info->wps_vendor_ext[i] == NULL)
continue; continue;
vendor_extension[num] = info->wps_vendor_ext[i]; vendor_extension[num] = info->wps_vendor_ext[i];
@ -2115,8 +2116,9 @@ dbus_bool_t wpas_dbus_getter_p2p_group_vendor_ext(DBusMessageIter *iter,
struct wpa_supplicant *wpa_s = user_data; struct wpa_supplicant *wpa_s = user_data;
struct hostapd_data *hapd; struct hostapd_data *hapd;
struct wpabuf *vendor_ext[MAX_WPS_VENDOR_EXTENSIONS]; struct wpabuf *vendor_ext[MAX_WPS_VENDOR_EXTENSIONS];
int num_vendor_ext = 0; unsigned int i, num_vendor_ext = 0;
int i;
os_memset(vendor_ext, 0, sizeof(vendor_ext));
/* Verify correct role for this property */ /* Verify correct role for this property */
if (wpas_get_p2p_role(wpa_s) == WPAS_P2P_ROLE_GO) { if (wpas_get_p2p_role(wpa_s) == WPAS_P2P_ROLE_GO) {