Fix bugs of app_info_create() function 60/291160/1
authorHwankyu Jhun <h.jhun@samsung.com>
Tue, 11 Apr 2023 03:28:11 +0000 (03:28 +0000)
committerHwankyu Jhun <h.jhun@samsung.com>
Tue, 11 Apr 2023 03:28:11 +0000 (03:28 +0000)
- Fixes the wrong comparison
- Fixes race condition

Change-Id: I4d3dbd2999d9d8e30b978368ae8e676776df928f
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/app_info.c

index d5d6327a1b8a4c0e2c7ee320af9e07b743fbb31e..66f2c498fce55705c5678812ec4cb95292026067 100644 (file)
@@ -20,6 +20,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
+#include <pthread.h>
 
 #include <pkgmgr-info.h>
 #include <package-manager.h>
@@ -82,6 +83,7 @@ typedef struct app_context_s {
 } app_context_t;
 
 static app_context_t __context;
+static pthread_mutex_t __mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static int app_info_convert_str_property(const char *property, char **converted_property)
 {
@@ -360,17 +362,22 @@ out:
 
 static void __app_context_initialize(void)
 {
-       if (__context.initialized)
+       pthread_mutex_lock(&__mutex);
+       if (__context.initialized) {
+               pthread_mutex_unlock(&__mutex);
                return;
+       }
 
        if (getuid() < REGULAR_UID_MIN) {
                __context.initialized = true;
+               pthread_mutex_unlock(&__mutex);
                return;
        }
 
        aul_app_get_appid_bypid(getpid(), __context.appid,
                        sizeof(__context.appid));
        __context.initialized = true;
+       pthread_mutex_unlock(&__mutex);
 }
 
 static int __app_info_create_by_alias_appid(const char *app_id,
@@ -381,7 +388,7 @@ static int __app_info_create_by_alias_appid(const char *app_id,
        int ret;
 
        __app_context_initialize();
-       if (__context.appid != NULL && !strcmp(__context.appid, app_id))
+       if (__context.appid[0] != '\0' && !strcmp(__context.appid, app_id))
                return APP_MANAGER_ERROR_INVALID_PARAMETER;
 
        ret = aul_svc_get_appid_by_alias_appid(app_id, &real_appid);