Fix memory leak 89/126289/1
authorJiwoong Im <jiwoong.im@samsung.com>
Wed, 19 Apr 2017 00:11:37 +0000 (09:11 +0900)
committerJiwoong Im <jiwoong.im@samsung.com>
Fri, 21 Apr 2017 01:17:22 +0000 (10:17 +0900)
- Fix memory leak in sqlite3 error_message
- Add missing sqlite3_stmt in _load_alarms_from_registry

Change-Id: Idbcca3d50d30a0d7848b728cb07cd4ccfdd57879
Signed-off-by: Jiwoong Im <jiwoong.im@samsung.com>
alarm-manager-registry.c
alarm-manager.c
include/alarm-internal.h

index 1e8d7d3..0554c0a 100644 (file)
@@ -46,7 +46,7 @@ extern sqlite3 *alarmmgr_db;
 bool _save_alarms(__alarm_info_t *__alarm_info);
 bool _update_alarms(__alarm_info_t *__alarm_info);
 bool _delete_alarms(alarm_id_t alarm_id);
-bool _load_alarms_from_registry(void);
+void _load_alarms_from_registry(void);
 
 bool _save_alarms(__alarm_info_t *__alarm_info)
 {
@@ -100,6 +100,7 @@ bool _save_alarms(__alarm_info_t *__alarm_info)
 
        if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
                SECURE_LOGE("sqlite3_exec() is failed. query = %s, error message = %s", query, error_message);
+               sqlite3_free(error_message);
                sqlite3_free(query);
                return false;
        }
@@ -159,6 +160,7 @@ bool _update_alarms(__alarm_info_t *__alarm_info)
 
        if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
                SECURE_LOGE("sqlite3_exec() is failed. query = %s, error message = %s", query, error_message);
+               sqlite3_free(error_message);
                sqlite3_free(query);
                return false;
        }
@@ -174,6 +176,7 @@ bool _delete_alarms(alarm_id_t alarm_id)
 
        if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
                SECURE_LOGE("sqlite3_exec() is failed. query = %s, error message = %s", query, error_message);
+               sqlite3_free(error_message);
                sqlite3_free(query);
                return false;
        }
@@ -182,7 +185,7 @@ bool _delete_alarms(alarm_id_t alarm_id)
        return true;
 }
 
-bool _load_alarms_from_registry()
+void _load_alarms_from_registry()
 {
        int i = 0;
        int col_idx;
@@ -207,7 +210,7 @@ bool _load_alarms_from_registry()
 
        if (SQLITE_OK != sqlite3_prepare(alarmmgr_db, query, strlen(query), &stmt, &tail)) {
                ALARM_MGR_EXCEPTION_PRINT("sqlite3_prepare() is failed.");
-               return false;
+               return;
        }
 
        for (i = 0; SQLITE_ROW == sqlite3_step(stmt); i++) {
@@ -216,7 +219,7 @@ bool _load_alarms_from_registry()
 
                if (G_UNLIKELY(__alarm_info == NULL)) {
                        ALARM_MGR_EXCEPTION_PRINT("Memory allocation failed.");
-                       return false;
+                       goto done;
                }
                alarm_info = (alarm_info_t *) &(__alarm_info->alarm_info);
                start = &alarm_info->start;
@@ -287,15 +290,12 @@ bool _load_alarms_from_registry()
                        alarm_context.alarms = g_slist_append(alarm_context.alarms, __alarm_info);
                }
        }
-
-
+done:
        _alarm_schedule();
-       if (SQLITE_OK != sqlite3_finalize(stmt)) {
+       if (sqlite3_finalize(stmt) != SQLITE_OK)
                ALARM_MGR_EXCEPTION_PRINT("sqlite3_finalize() is failed.");
-               return false;
-       }
 
-       return true;
+       return;
 }
 
 void _update_db_for_disabled_alarm(alarm_id_t alarm_id, bool disabled)
@@ -307,8 +307,7 @@ void _update_db_for_disabled_alarm(alarm_id_t alarm_id, bool disabled)
 
        if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
                SECURE_LOGE("Failed to update the DB table. error message = %s", error_message);
-               if (error_message)
-                       sqlite3_free(error_message);
+               sqlite3_free(error_message);
        }
 
        sqlite3_free(query);
index ab179b6..cb1928f 100644 (file)
@@ -695,6 +695,7 @@ gboolean __update_relative_alarms(gpointer user_data)
 
        if (sqlite3_exec(alarmmgr_db, "BEGIN EXCLUSIVE", NULL, NULL, &error_message) != SQLITE_OK) {
                SECURE_LOGE("sqlite3_exec() is failed. error message = %s", error_message);
+               sqlite3_free(error_message);
                return false;
        }
 
@@ -707,6 +708,7 @@ gboolean __update_relative_alarms(gpointer user_data)
 
        if (sqlite3_exec(alarmmgr_db, "COMMIT", NULL, NULL, &error_message) != SQLITE_OK) {
                SECURE_LOGE("sqlite3_exec() is failed. error message = %s", error_message);
+               sqlite3_free(error_message);
                return false;
        }
 
@@ -1286,6 +1288,7 @@ static bool __alarm_set_global_to_db(__alarm_info_t *alarm_info, bool global)
        if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
                SECURE_LOGE("sqlite3_exec() is failed. query = %s, error message = %s", query, error_message);
                sqlite3_free(query);
+               sqlite3_free(error_message);
                return false;
        }
 
@@ -3509,12 +3512,16 @@ gboolean alarm_manager_alarm_get_all_info(AlarmManager *pObject, GDBusMethodInvo
        }
 
        /* Drop a table */
-       if (sqlite3_exec(alarmmgr_tool_db, query_for_deleting_table, NULL, NULL, &error_message) != SQLITE_OK)
+       if (sqlite3_exec(alarmmgr_tool_db, query_for_deleting_table, NULL, NULL, &error_message) != SQLITE_OK) {
                ALARM_MGR_EXCEPTION_PRINT("Deleting the table is failed. error message = %s", error_message);
+               sqlite3_free(error_message);
+       }
 
        /* Create a table if it does not exist */
        if (sqlite3_exec(alarmmgr_tool_db, query_for_creating_table, NULL, NULL, &error_message) != SQLITE_OK) {
                ALARM_MGR_EXCEPTION_PRINT("Creating the table is failed. error message = %s", error_message);
+               sqlite3_free(error_message);
+               sqlite3_close(alarmmgr_tool_db);
                return_code = ERR_ALARM_SYSTEM_FAIL;
                goto done;
        }
@@ -3551,8 +3558,10 @@ gboolean alarm_manager_alarm_get_all_info(AlarmManager *pObject, GDBusMethodInvo
                                mode->repeat,
                                entry->alarm_info.alarm_type);
 
-               if (sqlite3_exec(alarmmgr_tool_db, query, NULL, NULL, &error_message) != SQLITE_OK)
+               if (sqlite3_exec(alarmmgr_tool_db, query, NULL, NULL, &error_message) != SQLITE_OK) {
                        SECURE_LOGE("sqlite3_exec() is failed. error message = %s", error_message);
+                       sqlite3_free(error_message);
+               }
 
                sqlite3_free(query);
        }
index cdb3a3f..eb892fe 100644 (file)
@@ -152,7 +152,7 @@ bool _send_alarm_get_next_duetime(alarm_context_t context, alarm_id_t alarm_id,
 bool _send_alarm_get_all_info(alarm_context_t context, char ** db_path, int *error_code);
 bool _send_alarm_reset(alarm_context_t context, int *error_code);
 bool _remove_from_scheduled_alarm_list(uid_t uid, alarm_id_t alarm_id);
-bool _load_alarms_from_registry();
+void _load_alarms_from_registry();
 bundle *_send_alarm_get_appsvc_info(alarm_context_t context, alarm_id_t alarm_id, int *error_code);
 notification_h _send_alarm_get_noti_info(alarm_context_t context, alarm_id_t alarm_id, int *error_code);
 bool _send_alarm_set_rtc_time(alarm_context_t context, alarm_date_t *time, int *error_code);