Fix prevent issue and remove compile warning messages 85/50885/1 accepted/tizen/ivi/20160218.023409 accepted/tizen/mobile/20151103.225030 accepted/tizen/tv/20151103.225044 accepted/tizen/wearable/20151103.225055 submit/tizen/20151103.105216 submit/tizen_common/20151229.142028 submit/tizen_common/20151229.144031 submit/tizen_common/20151229.154718 submit/tizen_ivi/20160217.000000 submit/tizen_ivi/20160217.000002
authorHwankyu Jhun <h.jhun@samsung.com>
Tue, 3 Nov 2015 07:42:22 +0000 (16:42 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Tue, 3 Nov 2015 07:51:00 +0000 (16:51 +0900)
- Fix double free

Change-Id: Icb6064f8d29fe9004f23fb118c96acd1c4743eb3
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
include/service_app.h
src/appcore-agent.c
src/service_app_error.c
src/service_app_main.c

index ac11273..55ed3d7 100644 (file)
@@ -84,8 +84,7 @@ typedef void (*service_app_control_cb) (app_control_h app_control, void *user_da
  * @see service_app_terminate_cb()
  * @see service_app_control_cb()
  */
-typedef struct
-{
+typedef struct {
        service_app_create_cb create; /**< This callback function is called at the start of the application. */
        service_app_terminate_cb terminate; /**< This callback function is called once after the main loop of the application exits. */
        service_app_control_cb app_control; /**< This callback function is called when another application sends the launch request to the application. */
index 50f6d36..4848a2f 100644 (file)
@@ -248,7 +248,6 @@ static void __exit_loop(void *data)
 
 static void __do_app(enum agent_event event, void *data, bundle * b)
 {
-       int r = 0;
        struct agent_priv *svc = data;
        app_control_h app_control = NULL;
 
@@ -263,20 +262,18 @@ static void __do_app(enum agent_event event, void *data, bundle * b)
        _ret_if(svc->ops == NULL);
 
        if (app_control_create_event(b, &app_control) != 0)
-       {
                return;
-       }
 
        switch (event) {
        case AGE_REQUEST:
                if (svc->ops->app_control)
-                       r = svc->ops->app_control(app_control, svc->ops->data);
+                       svc->ops->app_control(app_control, svc->ops->data);
                svc->state = AGS_RUNNING;
                break;
 /*     case AGE_STOP:
                if(svc->state == AGS_RUNNING) {
                        if (svc->ops->stop)
-                               r = svc->ops->stop(svc->ops->data);
+                               svc->ops->stop(svc->ops->data);
                        svc->state = AGS_STOPED;
                }
                break;
@@ -412,9 +409,8 @@ static int __sys_langchg_pre(void *data, void *evt)
                r = setlocale(LC_ALL, lang);
                if (r == NULL) {
                        r = setlocale(LC_ALL, lang);
-                       if (r) {
+                       if (r)
                                _DBG("*****appcore-agent setlocale=%s\n", r);
-                       }
                }
        }
 
@@ -452,9 +448,8 @@ static int __sys_regionchg_pre(void *data, void *evt)
                setenv("LC_IDENTIFICATION", region, 1);
 
                r = setlocale(LC_ALL, "");
-               if (r != NULL) {
+               if (r != NULL)
                        _DBG("*****appcore-agent setlocale=%s\n", r);
-               }
        }
 
        return 0;
@@ -590,21 +585,19 @@ static int __del_vconf_list(void)
 
 static int __aul_handler(aul_type type, bundle *b, void *data)
 {
-       int ret;
-
        switch (type) {
        case AUL_START:
-               ret = __agent_request(data, b);
+               __agent_request(data, b);
                break;
        case AUL_RESUME:
                break;
 /*     case AUL_STOP:
-               ret = __service_stop(data);
+               __service_stop(data);
                break;
 */
        case AUL_TERMINATE:
        case AUL_TERMINATE_BGAPP:
-               ret = __agent_terminate(data);
+               __agent_terminate(data);
                break;
        default:
                /* do nothing */
@@ -685,7 +678,7 @@ EXPORT_API int appcore_agent_init(const struct agent_ops *ops,
                            int argc, char **argv)
 {
        int r;
-       char *dirname;
+       const char *dirname;
        char *app_name = NULL;
        int pid;
 
@@ -712,22 +705,20 @@ EXPORT_API int appcore_agent_init(const struct agent_ops *ops,
        _retv_if(r == -1, -1);
 
        r = aul_launch_init(__aul_handler, &core);
-       if (r < 0) {
+       if (r < 0)
                goto err;
-       }
 
        r = aul_launch_argv_handler(argc, argv);
-       if (r < 0) {
+       if (r < 0)
                goto err;
-       }
 
        core.ops = ops;
-       core.state = 1;         /* TODO: use enum value */
+       core.state = 1; /* TODO: use enum value */
 
        return 0;
  err:
        __del_vconf_list();
-       //__clear(&core);
+
        return -1;
 }
 
@@ -749,7 +740,6 @@ static int __before_loop(struct agent_priv *agent, int argc, char **argv)
        if (agent->ops && agent->ops->create) {
                r = agent->ops->create(agent->ops->data);
                if (r < 0) {
-                       //appcore_exit();
                        if (agent->ops && agent->ops->terminate)
                                agent->ops->terminate(agent->ops->data);
                        errno = ECANCELED;
@@ -774,16 +764,16 @@ EXPORT_API int appcore_agent_terminate()
 {
        __del_vconf_list();
        ecore_main_loop_thread_safe_call_sync((Ecore_Data_Cb)__exit_loop, NULL);
+
        return 0;
 }
 
 EXPORT_API int appcore_agent_terminate_without_restart()
 {
-       int ret;
-
        __del_vconf_list();
        aul_status_update(STATUS_NORESTART);
        ecore_main_loop_thread_safe_call_sync((Ecore_Data_Cb)__exit_loop, NULL);
+
        return 0;
 }
 
@@ -796,10 +786,8 @@ EXPORT_API int appcore_agent_main(int argc, char **argv,
        _retv_if(r == -1, -1);
 
        r = __before_loop(&priv, argc, argv);
-       if (r == -1) {
-               //__unset_data(&priv);
+       if (r == -1)
                return -1;
-       }
 
        ecore_main_loop_begin();
 
@@ -807,7 +795,5 @@ EXPORT_API int appcore_agent_main(int argc, char **argv,
 
        __after_loop(&priv);
 
-       //__unset_data(&priv);
-
        return 0;
 }
index b2f7c26..814808c 100644 (file)
 
 static const char* service_app_error_to_string(app_error_e error)
 {
-       switch (error)
-       {
+       switch (error) {
        case APP_ERROR_NONE:
                return "NONE";
-
        case APP_ERROR_INVALID_PARAMETER:
                return "INVALID_PARAMETER";
-
        case APP_ERROR_OUT_OF_MEMORY:
                return "OUT_OF_MEMORY";
-
        case APP_ERROR_INVALID_CONTEXT:
                return "INVALID_CONTEXT";
-
        case APP_ERROR_NO_SUCH_FILE:
                return "NO_SUCH_FILE";
-
        case APP_ERROR_ALREADY_RUNNING:
                return "ALREADY_RUNNING";
-
-       default :
+       default:
                return "UNKNOWN";
        }
 }
@@ -59,13 +52,9 @@ static const char* service_app_error_to_string(app_error_e error)
 int service_app_error(app_error_e error, const char* function, const char *description)
 {
        if (description)
-       {
                LOGE("[%s] %s(0x%08x) : %s", function, service_app_error_to_string(error), error, description);
-       }
        else
-       {
                LOGE("[%s] %s(0x%08x)", function, service_app_error_to_string(error), error);
-       }
 
        return error;
 }
index 3155a5f..a8704f7 100644 (file)
 
 
 #include <stdlib.h>
-
+#include <unistd.h>
 #include <bundle.h>
 #include <aul.h>
 #include <dlog.h>
 #include <vconf-internal-keys.h>
 #include <app_common.h>
-
 #include <Eina.h>
-
 #include <appcore-agent.h>
+
 #include "service_app_private.h"
 #include "service_app_extension.h"
 
-#include <unistd.h>
-
-
 #ifdef LOG_TAG
 #undef LOG_TAG
 #endif
 #define TIZEN_PATH_MAX 1024
 #endif
 
-
 #define LOG_TAG "CAPI_APPFW_APPLICATION"
 
 typedef enum {
-       SERVICE_APP_STATE_NOT_RUNNING, // The application has been launched or was running but was terminated
-       SERVICE_APP_STATE_CREATING, // The application is initializing the resources on service_app_create_cb callback
-       SERVICE_APP_STATE_RUNNING, // The application is running in the foreground and background
+       SERVICE_APP_STATE_NOT_RUNNING, /* The application has been launched or was running but was terminated */
+       SERVICE_APP_STATE_CREATING, /* The application is initializing the resources on service_app_create_cb callback */
+       SERVICE_APP_STATE_RUNNING, /* The application is running in the foreground and background */
 } service_app_state_e;
 
 static int _service_app_get_id(char **id)
@@ -55,30 +50,20 @@ static int _service_app_get_id(char **id)
        int ret = -1;
 
        if (id == NULL)
-       {
                return service_app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
-       }
 
-       if (id_buf[0] == '\0')
-       {
+       if (id_buf[0] == '\0') {
                ret = aul_app_get_appid_bypid(getpid(), id_buf, sizeof(id_buf));
-
-               if (ret < 0) {
+               if (ret < 0)
                        return service_app_error(APP_ERROR_INVALID_CONTEXT, __FUNCTION__, "failed to get the application ID");
-               }
        }
 
        if (id_buf[0] == '\0')
-       {
                return service_app_error(APP_ERROR_INVALID_CONTEXT, __FUNCTION__, "failed to get the application ID");
-       }
 
        *id = strdup(id_buf);
-
        if (*id == NULL)
-       {
                return service_app_error(APP_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
-       }
 
        return APP_ERROR_NONE;
 }
@@ -88,26 +73,18 @@ static int _service_appget_package_app_name(const char *appid, char **name)
        char *name_token = NULL;
 
        if (appid == NULL)
-       {
                return service_app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
-       }
 
-       // com.vendor.name -> name
+       /* com.vendor.name -> name */
        name_token = strrchr(appid, '.');
-
        if (name_token == NULL)
-       {
                return service_app_error(APP_ERROR_INVALID_CONTEXT, __FUNCTION__, NULL);
-       }
 
        name_token++;
 
        *name = strdup(name_token);
-
        if (*name == NULL)
-       {
                return service_app_error(APP_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
-       }
 
        return APP_ERROR_NONE;
 }
@@ -297,19 +274,14 @@ static int _service_app_create(void *data)
        service_app_create_cb create_cb;
 
        if (app_context == NULL)
-       {
                return service_app_error(APP_ERROR_INVALID_CONTEXT, __FUNCTION__, NULL);
-       }
 
        appcore_agent_initialized = 1;
        _service_app_set_appcore_event_cb();
 
        create_cb = app_context->callback->create;
-
        if (create_cb == NULL || create_cb(app_context->data) == false)
-       {
                return service_app_error(APP_ERROR_INVALID_CONTEXT, __FUNCTION__, "service_app_create_cb() returns false");
-       }
 
        app_context->state = SERVICE_APP_STATE_RUNNING;
 
@@ -322,16 +294,11 @@ static int _service_app_terminate(void *data)
        service_app_terminate_cb terminate_cb;
 
        if (app_context == NULL)
-       {
                return service_app_error(APP_ERROR_INVALID_CONTEXT, __FUNCTION__, NULL);
-       }
 
        terminate_cb = app_context->callback->terminate;
-
        if (terminate_cb != NULL)
-       {
                terminate_cb(app_context->data);
-       }
 
        _service_app_unset_appcore_event_cb();
 
@@ -347,16 +314,11 @@ static int _service_app_reset(app_control_h app_control, void *data)
        service_app_control_cb service_cb;
 
        if (app_context == NULL)
-       {
                return service_app_error(APP_ERROR_INVALID_CONTEXT, __FUNCTION__, NULL);
-       }
 
        service_cb = app_context->callback->app_control;
-
        if (service_cb != NULL)
-       {
                service_cb(app_control, app_context->data);
-       }
 
        return APP_ERROR_NONE;
 }
@@ -377,26 +339,18 @@ EXPORT_API int service_app_main(int argc, char **argv, service_app_lifecycle_cal
        };
 
        if (argc <= 0 || argv == NULL || callback == NULL)
-       {
                return service_app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
-       }
 
        if (callback->create == NULL)
-       {
                return service_app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, "service_app_create_cb() callback must be registered");
-       }
 
        if (app_context.state != SERVICE_APP_STATE_NOT_RUNNING)
-       {
                return service_app_error(APP_ERROR_ALREADY_RUNNING, __FUNCTION__, NULL);
-       }
-
 
-       if (_service_app_get_id(&(app_context.package)) == APP_ERROR_NONE)
-       {
-               if (_service_appget_package_app_name(app_context.package, &(app_context.service_app_name)) != APP_ERROR_NONE)
-               {
+       if (_service_app_get_id(&(app_context.package)) == APP_ERROR_NONE) {
+               if (_service_appget_package_app_name(app_context.package, &(app_context.service_app_name)) != APP_ERROR_NONE) {
                        free(app_context.package);
+                       app_context.package = NULL;
                }
        }