Fix a crash issue
authorsaerome.kim <saerome.kim@samsung.com>
Thu, 31 Oct 2019 06:06:01 +0000 (15:06 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 4 Nov 2019 07:14:03 +0000 (16:14 +0900)
- Problem: crash happens when executing UTC.
- Cause: A memory allocation of the device is freed when
  ua_device_destry() called, but linked list is not removed.
- Solution: Remove the link in the list when ua_device_destroy() called.

Change-Id: Idcb8bf0a54aac101aa41e7fe6d23db8d78222d91
Signed-off-by: saerome.kim <saerome.kim@samsung.com>
src/user-awareness-users.c

index ae9c42d5d01ce8a3621dee6221f792cae3779e0c..e0a9f4b864e183b8e06a9d6ef3152934ec79519a 100644 (file)
@@ -28,6 +28,20 @@ extern GSList *ua_devices_list;
 extern GSList *ua_devices_user_list;
 extern ua_callback_s user_callbacks[UA_USER_EVENT_MAX];
 
+static void __ua_check_and_free_user_info_from_list(const char *account)
+{
+       ua_user_info_s *user_info = NULL;
+
+       ret_if(NULL == account);
+
+       user_info = _ua_get_user_from_list(account);
+
+       if (user_info) {
+               ua_users_list = g_slist_remove(ua_users_list, user_info);
+               _ua_free_ua_user_info_t(user_info);
+       }
+}
+
 ua_user_info_s *_ua_get_user_from_list(const char *account)
 {
        GSList *l;
@@ -760,7 +774,6 @@ int ua_user_set_name(
        UA_VALIDATE_INPUT_PARAMETER(handle);
        UA_VALIDATE_INPUT_PARAMETER(name);
 
-       retv_if(user->isadded, UA_ERROR_INVALID_PARAMETER);
        retv_if((strlen(name) > UAM_USER_NAME_MAX_STRING_LEN), UA_ERROR_INVALID_PARAMETER);
 
        if (user->name)
@@ -822,7 +835,7 @@ int ua_user_destroy(ua_user_h user_handle)
                /* LCOV_EXCL_STOP */
        }
 
-       _ua_free_ua_user_info_t(user);
+       __ua_check_and_free_user_info_from_list(user->account);
 
        FUNC_EXIT;
        return UA_ERROR_NONE;