Fix invalid access 36/193236/3
authorHwankyu Jhun <h.jhun@samsung.com>
Fri, 16 Nov 2018 10:20:07 +0000 (19:20 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Sun, 18 Nov 2018 23:55:32 +0000 (08:55 +0900)
The reply callback can be invoked before the result callback is invoked.

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

index c645d92..5a3c4e6 100644 (file)
@@ -209,13 +209,18 @@ static void app_control_request_reply_broker(bundle *appsvc_bundle, int appsvc_r
        user_data = request_context->user_data;
        reply_cb = request_context->reply_cb;
 
-       if (reply_cb != NULL)
+       if (reply_cb != NULL) {
                reply_cb(request, reply, result, user_data);
-       else
+               request_context->reply_cb = NULL;
+       } else {
                app_control_error(APP_CONTROL_ERROR_INVALID_PARAMETER, __FUNCTION__, "invalid callback ");
+       }
 
        app_control_destroy(reply);
 
+       if (request_context->result_cb)
+               return;
+
        if (request_context->app_control != NULL)
                app_control_destroy(request_context->app_control);
 
@@ -791,15 +796,14 @@ static void app_control_request_result_broker(int request_code, int result,
                request_context->result_cb = NULL;
        }
 
-       if (result > 0) {
-               __handle_app_started_result(app_control,
-                       request_context->reply_cb ? request_context : NULL);
-       }
-
        if (result < 0 || !request_context->reply_cb) {
                app_control_destroy(request_context->app_control);
                free(request_context);
+               return;
        }
+
+       __handle_app_started_result(app_control,
+                       request_context->reply_cb ? request_context : NULL);
 }
 
 static int __launch_request_verify_operation(struct launch_request_s *req)