Fix crash issue 70/119870/1
authorVenkatesha Sarpangala <sarpangala.v@samsung.com>
Sun, 19 Mar 2017 09:13:01 +0000 (14:43 +0530)
committerJiwoong Im <jiwoong.im@samsung.com>
Mon, 20 Mar 2017 10:16:22 +0000 (03:16 -0700)
- API caller crashed due to null pointer dereference
- Fix by adding Null check before dereference

Change-Id: I885e4b2cb7b8c8d79656e95abc5a9dcfa1d1d7f6
Signed-off-by: Venkatesha Sarpangala <sarpangala.v@samsung.com>
(cherry picked from commit 51d21ea2c568041a91a003bebc0af7dc518e8ec7)

src/alarm-lib-stub.c

index 0b983db371a9cbee31652c9bc8e1250b2a5af292..089a1b642694064f016e70021fa8aad527765272 100644 (file)
@@ -103,14 +103,16 @@ bool _send_alarm_create_noti(alarm_context_t context, alarm_info_t *alarm_info,
                /* error_code should be set */
                ALARM_MGR_EXCEPTION_PRINT(
                                "alarm_manager_call_alarm_create_noti_sync()failed. alarm_id[%d], return_code[%d].", alarm_id, return_code);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
                return false;
        }
 
@@ -168,14 +170,16 @@ bool _send_alarm_create_appsvc(alarm_context_t context, alarm_info_t *alarm_info
                /* error_code should be set */
                ALARM_MGR_EXCEPTION_PRINT(
                                "alarm_manager_call_alarm_create_appsvc_sync()failed. alarm_id[%d], return_code[%d].", alarm_id, return_code);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
                return false;
        }
 
@@ -229,14 +233,16 @@ bool _send_alarm_create(alarm_context_t context, alarm_info_t *alarm_info,
                /* error_code should be set */
                ALARM_MGR_EXCEPTION_PRINT(
                                "alarm_manager_call_alarm_create_sync()failed. alarm_id[%d], return_code[%d]", alarm_id, return_code);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
                return false;
        }
 
@@ -269,14 +275,16 @@ bool _send_alarm_create_periodic(alarm_context_t context, int interval, int is_r
                                alarm_id, &return_code, NULL, &error)) {
                ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_create_periodic_sync()failed. alarm_id[%d], return_code[%d]",
                                alarm_id, return_code);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
                return false;
        }
 
@@ -301,14 +309,16 @@ bundle *_send_alarm_get_appsvc_info(alarm_context_t context, alarm_id_t alarm_id
                /* g_dbus_proxy_call_sync error */
                /*error_code should be set */
                ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_get_appsvc_info_sync() failed. alarm_id[%d], return_code[%d].", alarm_id, return_code);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
 
                if (b_data)
                        g_free(b_data);
@@ -345,14 +355,16 @@ notification_h _send_alarm_get_noti_info(alarm_context_t context, alarm_id_t ala
                /* g_dbus_proxy_call_sync error */
                /*error_code should be set */
                ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_get_appsvc_info_sync() failed. alarm_id[%d], return_code[%d].", alarm_id, return_code);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
 
                if (noti_data)
                        g_free(noti_data);
@@ -397,14 +409,16 @@ bool _send_alarm_set_rtc_time(alarm_context_t context, alarm_date_t *time, int *
                /* g_dbus_proxy_call_sync error */
                /*error_code should be set */
                ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_set_rtc_time() failed. return_code[%d]", return_code);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
 
                return false;
        }
@@ -428,14 +442,16 @@ bool _send_alarm_delete(alarm_context_t context, alarm_id_t alarm_id, int *error
                /* g_dbus_proxy_call_sync error */
                /*error_code should be set */
                ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_delete_sync() failed. alarm_id[%d], return_code[%d]", alarm_id, return_code);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
 
                return false;
        }
@@ -459,14 +475,16 @@ bool _send_alarm_delete_all(alarm_context_t context, int *error_code)
                /* g_dbus_proxy_call_sync error */
                /*error_code should be set */
                ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_delete_all_sync() failed. return_code[%d]", return_code);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
 
                return false;
        }
@@ -495,14 +513,16 @@ bool _send_alarm_get_list_of_ids(alarm_context_t context, int maxnum_of_ids,
                /*error_code should be set */
                ALARM_MGR_EXCEPTION_PRINT(
                                "alarm_manager_call_alarm_get_list_of_ids_sync() failed by dbus. alarm_id[%d], return_code[%d]\n", alarm_id, return_code);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
 
                return false;
        }
@@ -537,17 +557,19 @@ bool _send_alarm_get_number_of_ids(alarm_context_t context, int *num_of_ids,
                /* g_dbus_proxy_call_sync error */
                /* error_code should be set */
                ALARM_MGR_EXCEPTION_PRINT(
-                               "alarm_manager_call_alarm_get_number_of_ids_sync() failed by dbus. return_code[%d], return_code[%s].",
-                               return_code, error->message);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                               "alarm_manager_call_alarm_get_number_of_ids_sync() failed by dbus. return_code[%d]",
+                               return_code);
 
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
                return false;
        }
 
@@ -579,14 +601,16 @@ bool _send_alarm_get_info(alarm_context_t context, alarm_id_t alarm_id,
                /* error_code should be set */
                ALARM_MGR_EXCEPTION_PRINT(
                                "alarm_manager_call_alarm_get_info_sync() failed by dbus. alarm_id[%d], return_code[%d]\n", alarm_id, return_code);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
                return false;
        }
 
@@ -612,14 +636,16 @@ bool _send_alarm_get_next_duetime(alarm_context_t context,
                /*error_code should be set */
                ALARM_MGR_EXCEPTION_PRINT(
                                "alarm_manager_call_alarm_get_next_duetime_sync() failed by dbus. alarm_id[%d], return_code[%d]\n", alarm_id, return_code);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
                return false;
        }
 
@@ -640,15 +666,17 @@ bool _send_alarm_get_all_info(alarm_context_t context, char ** db_path, int *err
        if (!alarm_manager_call_alarm_get_all_info_sync((AlarmManager*)context.proxy, db_path, &return_code, NULL, &error)) {
                /*g_dbus_proxy_call_sync error */
                /*error_code should be set */
-               ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_get_all_info_sync() failed by dbus. return_code[%d][%s]", return_code, error->message);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+               ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_get_all_info_sync() failed by dbus. return_code[%d]", return_code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
                return false;
        }
 
@@ -698,8 +726,10 @@ static void _alarm_set_time_cb(GObject *source_object, GAsyncResult *res,
        if (!alarm_manager_call_alarm_set_time_finish((AlarmManager *)func_data->proxy,
                                (gint *)&return_code,
                                res, &error)) {
-               ALARM_MGR_EXCEPTION_PRINT("dbus error message: %s", error->message);
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("dbus error message: %s", error->message);
+                       g_error_free(error);
+               }
                return_code = ERR_ALARM_SYSTEM_FAIL;
        }
 
@@ -734,15 +764,17 @@ bool _send_alarm_set_time_with_propagation_delay(alarm_context_t context, unsign
        if (!alarm_manager_call_alarm_set_time_with_propagation_delay_sync((AlarmManager*)context.proxy, new_sec, new_nsec, req_sec, req_nsec, &return_code, NULL, &error)) {
                /*g_dbus_proxy_call_sync error */
                /*error_code should be set */
-               ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_set_time_with_propagation_delay_sync() failed by dbus. return_code[%d][%s]", return_code, error->message);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+               ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_set_time_with_propagation_delay_sync() failed by dbus. return_code[%d]", return_code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
                return false;
        }
 
@@ -765,8 +797,10 @@ static void _alarm_set_time_with_delay_cb(GObject *source_object, GAsyncResult *
        if (!alarm_manager_call_alarm_set_time_with_propagation_delay_finish((AlarmManager *)func_data->proxy,
                                (gint *)&return_code,
                                res, &error)) {
-               ALARM_MGR_EXCEPTION_PRINT("dbus error message: %s", error->message);
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("dbus error message: %s", error->message);
+                       g_error_free(error);
+               }
                return_code = ERR_ALARM_SYSTEM_FAIL;
        }
 
@@ -802,15 +836,17 @@ bool _send_alarm_set_timezone(alarm_context_t context, char *tzpath_str, int *er
        if (!alarm_manager_call_alarm_set_timezone_sync((AlarmManager*)context.proxy, tzpath_str, &return_code, NULL, &error)) {
                /*g_dbus_proxy_call_sync error */
                /*error_code should be set */
-               ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_set_timezone_sync() failed by dbus. return_code[%d][%s]", return_code, error->message);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+               ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_set_timezone_sync() failed by dbus. return_code[%d]", return_code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
                return false;
        }
 
@@ -831,15 +867,17 @@ bool _send_alarm_set_global(alarm_context_t context, const alarm_id_t alarm_id,
        if (!alarm_manager_call_alarm_set_global_sync((AlarmManager *)context.proxy, alarm_id, global, &return_code, NULL, &error)) {
                /*g_dbus_proxy_call_sync error */
                /*error_code should be set */
-               ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_set_global_sync() failed by dbus. return_code[%d][%s]", return_code, error->message);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+               ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_set_global_sync() failed by dbus. return_code[%d]", return_code);
                if (error_code) {
-                       if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
+                       if (error && error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
                return false;
        }
 
@@ -861,15 +899,17 @@ bool _send_alarm_get_global(alarm_context_t context, const alarm_id_t alarm_id,
        if (!alarm_manager_call_alarm_get_global_sync((AlarmManager *)context.proxy, alarm_id, (gboolean *)&_global, &return_code, NULL, &error)) {
                /*g_dbus_proxy_call_sync error */
                /*error_code should be set */
-               ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_get_global_sync() failed by dbus. return_code[%d][%s]", return_code, error->message);
-               ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+               ALARM_MGR_EXCEPTION_PRINT("alarm_manager_call_alarm_get_global_sync() failed by dbus. return_code[%d]", return_code);
                if (error_code) {
                        if (error->code == G_DBUS_ERROR_ACCESS_DENIED)
                                *error_code = ERR_ALARM_NO_PERMISSION;
                        else
                                *error_code = ERR_ALARM_SYSTEM_FAIL;
                }
-               g_error_free(error);
+               if (error) {
+                       ALARM_MGR_EXCEPTION_PRINT("error->message is %s(%d)", error->message, error->code);
+                       g_error_free(error);
+               }
                return false;
        }