diff options
-rwxr-xr-x | gsupplicant/gsupplicant.h | 4 | ||||
-rwxr-xr-x | gsupplicant/supplicant.c | 49 |
2 files changed, 38 insertions, 15 deletions
diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h index 22b0b3e3..1a956290 100755 --- a/gsupplicant/gsupplicant.h +++ b/gsupplicant/gsupplicant.h @@ -231,6 +231,10 @@ struct _GSupplicantSSID { const char *connector; const char *c_sign_key; const char *net_access_key; + bool is_passphrase_alloc; + bool is_connector_alloc; + bool is_c_sign_key_alloc; + bool is_net_access_key_alloc; #endif }; diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index 915ffb9f..e63831bf 100755 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -6728,10 +6728,14 @@ static void interface_select_network_result(const char *error, #if defined TIZEN_EXT g_free(data->ssid->ssid); - g_free((char *)data->ssid->passphrase); - g_free((char *)data->ssid->connector); - g_free((char *)data->ssid->c_sign_key); - g_free((char *)data->ssid->net_access_key); + if (data->ssid->is_passphrase_alloc) + g_free((char *)data->ssid->passphrase); + if (data->ssid->is_connector_alloc) + g_free((char *)data->ssid->connector); + if (data->ssid->is_c_sign_key_alloc) + g_free((char *)data->ssid->c_sign_key); + if (data->ssid->is_net_access_key_alloc) + g_free((char *)data->ssid->net_access_key); #endif g_free(data->ssid); dbus_free(data); @@ -6820,10 +6824,14 @@ error: g_free(data->path); #if defined TIZEN_EXT g_free(data->ssid->ssid); - g_free((char *)data->ssid->passphrase); - g_free((char *)data->ssid->connector); - g_free((char *)data->ssid->c_sign_key); - g_free((char *)data->ssid->net_access_key); + if (data->ssid->is_passphrase_alloc) + g_free((char *)data->ssid->passphrase); + if (data->ssid->is_connector_alloc) + g_free((char *)data->ssid->connector); + if (data->ssid->is_c_sign_key_alloc) + g_free((char *)data->ssid->c_sign_key); + if (data->ssid->is_net_access_key_alloc) + g_free((char *)data->ssid->net_access_key); #endif g_free(data->ssid); g_free(data); @@ -7697,6 +7705,7 @@ static void decryption_request_reply(DBusPendingCall *call, dbus_message_iter_get_basic(&args, &out_data); data->ssid->passphrase = g_strdup((const gchar *)out_data); + data->ssid->is_passphrase_alloc = true; ret = supplicant_dbus_method_call(data->interface->path, SUPPLICANT_INTERFACE ".Interface", "AddNetwork", @@ -7710,10 +7719,14 @@ done: callback_assoc_failed(decrypt_request_data.data->user_data); g_free(data->path); g_free(data->ssid->ssid); - g_free((char *)data->ssid->passphrase); - g_free((char *)data->ssid->connector); - g_free((char *)data->ssid->c_sign_key); - g_free((char *)data->ssid->net_access_key); + if (data->ssid->is_passphrase_alloc) + g_free((char *)data->ssid->passphrase); + if (data->ssid->is_connector_alloc) + g_free((char *)data->ssid->connector); + if (data->ssid->is_c_sign_key_alloc) + g_free((char *)data->ssid->c_sign_key); + if (data->ssid->is_net_access_key_alloc) + g_free((char *)data->ssid->net_access_key); g_free(data->ssid); dbus_free(data); } @@ -7819,14 +7832,17 @@ static void decrypt_conf_obj_reply(DBusPendingCall *call, if (g_strcmp0(key, "connector") == 0) { dbus_message_iter_get_basic(&value, &out_data); data->ssid->connector = g_strdup((const gchar *)out_data); + data->ssid->is_connector_alloc = true; SUPPLICANT_DBG("connector %s", data->ssid->connector); } else if (g_strcmp0(key, "c_sign_key") == 0) { dbus_message_iter_get_basic(&value, &out_data); data->ssid->c_sign_key = g_strdup((const gchar *)out_data); + data->ssid->is_c_sign_key_alloc = true; SUPPLICANT_DBG("c_sign_key %s", data->ssid->c_sign_key); } else if (g_strcmp0(key, "net_access_key") == 0) { dbus_message_iter_get_basic(&value, &out_data); data->ssid->net_access_key = g_strdup((const gchar *)out_data); + data->ssid->is_net_access_key_alloc = true; SUPPLICANT_DBG("net_access_key %s", data->ssid->net_access_key); } } @@ -7845,9 +7861,12 @@ done: callback_assoc_failed(decrypt_request_data.data->user_data); g_free(data->path); g_free(data->ssid->ssid); - g_free((char *)data->ssid->connector); - g_free((char *)data->ssid->c_sign_key); - g_free((char *)data->ssid->net_access_key); + if (data->ssid->is_connector_alloc) + g_free((char *)data->ssid->connector); + if (data->ssid->is_c_sign_key_alloc) + g_free((char *)data->ssid->c_sign_key); + if (data->ssid->is_net_access_key_alloc) + g_free((char *)data->ssid->net_access_key); g_free(data->ssid); dbus_free(data); } |