Fix 'sql_str' memory leak if 'handle' is null or 'sql_str' is empty string 36/239236/1
authorjiyong.min <jiyong.min@samsung.com>
Tue, 21 Jul 2020 23:23:40 +0000 (08:23 +0900)
committerhj kim <backto.kim@samsung.com>
Thu, 23 Jul 2020 04:46:30 +0000 (04:46 +0000)
Change-Id: I00febeb6285b7b37c6ae3dbb991f75dcb05d7dd3
(cherry picked from commit 5c335a35d6c35c3c3170e6c1584628ceca3af150)

src/media_controller_db.c

index 309d5cc12d41d16be5f1a6ec619ccba62e7b379a..773370606e81085bec74b90b5da721c20f1b662c 100644 (file)
@@ -27,7 +27,7 @@ static int __mc_db_update_db(mc_priv_type_e priv_type, const char *sql_str)
        return _mc_ipc_send_message_to_server(MC_MSG_DB_UPDATE, priv_type, sql_str);
 }
 
-static int __mc_db_get_record(sqlite3 *handle, char *sql_str, sqlite3_stmt **stmt)
+static int __mc_db_get_record(sqlite3 *handle, const char *sql_str, sqlite3_stmt **stmt)
 {
        int ret = SQLITE_OK;
        sqlite3_stmt *statement = NULL;
@@ -37,7 +37,6 @@ static int __mc_db_get_record(sqlite3 *handle, char *sql_str, sqlite3_stmt **stm
        mc_retvm_if(!MC_STRING_VALID(sql_str), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "SQL string is null");
 
        ret = sqlite3_prepare_v2(handle, sql_str, strlen(sql_str), &statement, NULL);
-       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != SQLITE_OK, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "prepare error [%s]", sqlite3_errmsg(handle));
 
        if (sqlite3_step(statement) != SQLITE_ROW) {
@@ -65,6 +64,7 @@ static int __mc_db_get_int_value(sqlite3 *handle, const char *server_name, const
        sql_str = sqlite3_mprintf("SELECT %q FROM %q WHERE name=%Q", column, MC_DB_TABLE_SERVER_INFO, server_name);
 
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret);
 
        *value = sqlite3_column_int(stmt, 0);
@@ -205,6 +205,7 @@ int _mc_db_get_latest_server_info(sqlite3 *handle, char **latest_server_name, mc
 
        sql_str = sqlite3_mprintf("SELECT name, server_state FROM %q WHERE name IN (SELECT name FROM %q)", MC_DB_TABLE_SERVER_INFO, MC_DB_TABLE_LATEST_SERVER);
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        if (ret == MEDIA_CONTROLLER_ERROR_NONE) {
                *latest_server_name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
                *state = sqlite3_column_int(stmt, 1);
@@ -234,6 +235,7 @@ int _mc_db_get_playback_info(sqlite3 *handle, const char *server_name, mc_playba
                MC_DB_TABLE_SERVER_INFO, server_name);
 
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret);
 
        _playback = (media_controller_playback_s *)calloc(1, sizeof(media_controller_playback_s));
@@ -299,6 +301,7 @@ int _mc_db_get_metadata_info(sqlite3 *handle, const char *server_name, mc_metada
        sql_str = sqlite3_mprintf("SELECT %s FROM %q WHERE name=%Q", META_LIST, MC_DB_TABLE_LATEST_META, server_name);
 
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret == TIZEN_ERROR_NO_DATA, MEDIA_CONTROLLER_ERROR_NONE, "no metadata info");
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_record failed [%d]", ret);
 
@@ -329,6 +332,7 @@ int _mc_db_get_icon_uri(sqlite3 *handle, const char *server_name, char **uri)
        sql_str = sqlite3_mprintf("SELECT icon_uri FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name);
 
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret);
 
        *uri = g_strdup((const char *)sqlite3_column_text(stmt, 0));
@@ -350,6 +354,7 @@ static int __mc_db_get_ability(sqlite3 *handle, const char *server_name, unsigne
        sql_str = sqlite3_mprintf("SELECT ability_decided, ability_supported FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name);
 
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret);
 
        *decided = (unsigned long long)sqlite3_column_int64(stmt, 0);
@@ -481,6 +486,7 @@ int _mc_db_get_playlist_count(sqlite3 *handle, const char *server_name)
        sql_str = sqlite3_mprintf("SELECT COUNT(DISTINCT playlist_name) FROM %q WHERE server_name = %Q", MC_DB_TABLE_PLAYLIST, server_name);
 
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, 0, "__mc_db_get_record failed [%d]", ret);
 
        count = sqlite3_column_int(stmt, 0);
@@ -543,6 +549,7 @@ gboolean _mc_db_is_playlist_exist(sqlite3 *handle, const char *server_name, cons
        sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE server_name=%Q AND playlist_name=%Q", MC_DB_TABLE_PLAYLIST, server_name, playlist_name);
 
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret);
 
        ret = sqlite3_column_int(stmt, 0);
@@ -597,6 +604,7 @@ int _mc_db_get_playlist_item_count(sqlite3 *handle, const char *server_name, cha
        sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE server_name=%Q AND playlist_name=%Q AND item_index IS NOT NULL", MC_DB_TABLE_PLAYLIST, server_name, playlist_name);
 
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, 0, "__mc_db_get_record failed [%d]", ret);
 
        count = sqlite3_column_int(stmt, 0);
@@ -663,6 +671,7 @@ gboolean _mc_db_is_exist_server(sqlite3 *handle, const char *server_name)
        sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name='%q'", MC_DB_TABLE_SERVER_INFO, server_name);
 
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret);
 
        ret = sqlite3_column_int(stmt, 0);
@@ -690,6 +699,7 @@ gboolean _mc_db_is_activated_client(sqlite3 *handle, const char *client_name)
        sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name='%q' AND type=%d", MC_DB_TABLE_APP_LIST, client_name, MC_PRIV_TYPE_CLIENT);
 
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret);
 
        ret = sqlite3_column_int(stmt, 0);
@@ -717,6 +727,7 @@ gboolean _mc_db_is_activated_server(sqlite3 *handle, const char *server_name)
        sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name='%q' AND type=%d", MC_DB_TABLE_APP_LIST, server_name, MC_PRIV_TYPE_SERVER);
 
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret);
 
        ret = sqlite3_column_int(stmt, 0);
@@ -744,6 +755,7 @@ gboolean _mc_db_is_latest_server(sqlite3 *handle, const char *server_name)
        sql_str = sqlite3_mprintf("SELECT COUNT(*) FROM %q WHERE name=%Q", MC_DB_TABLE_LATEST_SERVER, server_name);
 
        ret = __mc_db_get_record(handle, sql_str, &stmt);
+       SQLITE3_SAFE_FREE(sql_str);
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "__mc_db_get_record failed [%d]", ret);
 
        ret = sqlite3_column_int(stmt, 0);