Bug fix of updating DB to (null) when using g_strdup_printf. 45/202645/1
authorhj kim <backto.kim@samsung.com>
Thu, 28 Mar 2019 09:51:03 +0000 (18:51 +0900)
committerhj kim <backto.kim@samsung.com>
Tue, 2 Apr 2019 07:05:44 +0000 (16:05 +0900)
if the value is NULL, g_strdup_print make it to (null).
And this value added to DB and it looks like a real string value.

Change-Id: I03b8c9f1c6a52f683ee60ade6c1dfea39e6a80a3

packaging/capi-media-controller.spec
src/media_controller_db.c
src/media_controller_ipc.c
src/media_controller_metadata.c
src/media_controller_server.c
svc/media_controller_db_util.c
test/client_test/media_controller_client_test.c
test/server_test/media_controller_server_test.c

index eee3471b73eb793ac4b17de69f19f97c4cff134f..738e0a863273c3c2704ee8e96cd98730882fbf17 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-controller
 Summary:    A media controller library in Tizen Native API
-Version:    0.1.78
+Version:    0.1.79
 Release:    1
 Group:      Multimedia/API
 License:    Apache-2.0
index 7e2174b7bd4b0618b868d42d6bcd0cf6249f6257..dcb3f05e6cea45b0ed06ec8b7738c38108dd9bec 100644 (file)
@@ -289,22 +289,19 @@ static int __mc_db_get_count(void *handle, const char *sql_str)
 int mc_db_update_playback_info(const char *server_name, const media_controller_playback_s playback)
 {
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
+       char *_query = NULL;
        char *sql_str = NULL;
 
-       mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
+       mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+
+       _query = sqlite3_mprintf("UPDATE '%q' SET playback_state=%d, playback_position=%llu, playlist_name=%Q, playlist_index=%Q, playback_content_type=%d, age_rating=%d;",
+                               server_name, playback.state, playback.position, playback.playlist_name, playback.index, playback.content_type, playback.age_rating);
 
-       sql_str = g_strdup_printf("%s%s%s%s%d%s%llu%s%s%s%s%s%d%s%d", MC_DB_CMD_UPDATE_PLAYBACK, MC_STRING_DELIMITER,
-                       server_name,  MC_STRING_DELIMITER,
-                       playback.state,  MC_STRING_DELIMITER,
-                       playback.position,  MC_STRING_DELIMITER,
-                       playback.playlist_name,  MC_STRING_DELIMITER,
-                       playback.index,  MC_STRING_DELIMITER,
-                       playback.content_type, MC_STRING_DELIMITER,
-                       playback.age_rating);
-       mc_retvm_if(sql_str == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail making sql_str");
+       sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_UPDATE_PLAYBACK, MC_STRING_DELIMITER, _query);
 
        ret = __mc_db_update_db(MC_PRIV_TYPE_SERVER, sql_str);
 
+       SQLITE3_SAFE_FREE(_query);
        MC_SAFE_FREE(sql_str);
 
        return ret;
@@ -315,26 +312,19 @@ int mc_db_update_whole_metadata(const char *server_name,
                                        const char *copyright, const char *description, const char *track_num, const char *picture)
 {
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
+       char *_query = NULL;
        char *sql_str = NULL;
 
-       mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
+       mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
 
-       sql_str = g_strdup_printf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", MC_DB_CMD_UPDATE_META, MC_STRING_DELIMITER, server_name,  MC_STRING_DELIMITER,
-                                       title, MC_STRING_DELIMITER,
-                                       artist, MC_STRING_DELIMITER,
-                                       album, MC_STRING_DELIMITER,
-                                       author, MC_STRING_DELIMITER,
-                                       genre, MC_STRING_DELIMITER,
-                                       duration, MC_STRING_DELIMITER,
-                                       date, MC_STRING_DELIMITER,
-                                       copyright, MC_STRING_DELIMITER,
-                                       description, MC_STRING_DELIMITER,
-                                       track_num, MC_STRING_DELIMITER,
-                                       picture);
+       _query = sqlite3_mprintf("UPDATE '%q' SET title=%Q, artist=%Q, album=%Q, author=%Q, genre=%Q, duration=%Q, date=%Q, copyright=%Q, description=%Q, track_num=%Q, picture=%Q;",
+                       server_name, title, artist, album, author, genre, duration, date, copyright, description, track_num, picture);
 
+       sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_UPDATE_META, MC_STRING_DELIMITER, _query);
 
        ret = __mc_db_update_db(MC_PRIV_TYPE_SERVER, sql_str);
 
+       SQLITE3_SAFE_FREE(_query);
        MC_SAFE_FREE(sql_str);
 
        return ret;
@@ -345,7 +335,7 @@ int mc_db_update_shuffle_mode(const char *server_name, int shuffle_mode)
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
 
-       mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
+       mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
 
        sql_str = g_strdup_printf("%s%s%s%s%d", MC_DB_CMD_UPDATE_SHUFFLE, MC_STRING_DELIMITER, server_name,  MC_STRING_DELIMITER, shuffle_mode);
 
@@ -361,7 +351,7 @@ int mc_db_update_repeat_mode(const char *server_name, int repeat_mode)
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
 
-       mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
+       mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
 
        sql_str = g_strdup_printf("%s%s%s%s%d", MC_DB_CMD_UPDATE_REPEAT, MC_STRING_DELIMITER, server_name,  MC_STRING_DELIMITER, repeat_mode);
 
@@ -377,8 +367,8 @@ int mc_db_update_icon_uri(const char *server_name, const char *uri)
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
 
-       mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
-       mc_retvm_if(uri == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "uri is NULL");
+       mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+       mc_retvm_if(!uri, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid uri");
 
        sql_str = g_strdup_printf("%s%s%s%s%s", MC_DB_CMD_UPDATE_ICON, MC_STRING_DELIMITER, server_name,  MC_STRING_DELIMITER, uri);
 
@@ -394,7 +384,7 @@ int mc_db_update_ability_supported(const char *server_name, const media_controll
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
 
-       mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
+       mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
 
        sql_str = g_strdup_printf("%s%s%s%s%llu%s%llu", MC_DB_CMD_UPDATE_ABILITY, MC_STRING_DELIMITER, server_name, MC_STRING_DELIMITER, (unsigned long long)ability_supported.decided, MC_STRING_DELIMITER, (unsigned long long)ability_supported.supported);
 
@@ -914,7 +904,7 @@ int mc_db_create_server_table(const char *server_name)
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
 
-       mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
+       mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
 
        sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_CREATE_SERVER, MC_STRING_DELIMITER, server_name);
 
@@ -930,7 +920,7 @@ int mc_db_delete_server_table(const char *server_name)
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
 
-       mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
+       mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
 
        sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_REMOVE_SERVER, MC_STRING_DELIMITER, server_name);
 
@@ -1137,7 +1127,7 @@ int mc_db_update_server_and_playback_state(const char *server_name, mc_server_st
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
 
-       mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
+       mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
 
        sql_str = g_strdup_printf("%s%s%s%s%d%s%d", MC_DB_CMD_UPDATE_STATE_PLAYBACK, MC_STRING_DELIMITER, server_name, MC_STRING_DELIMITER, server_state, MC_STRING_DELIMITER, playback_state);
 
@@ -1153,7 +1143,7 @@ int mc_db_update_latest_server_table(const char *server_name)
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
 
-       mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
+       mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
 
        sql_str = g_strdup_printf("%s%s%s", MC_DB_CMD_UPDATE_LATEST, MC_STRING_DELIMITER, server_name);
 
@@ -1169,7 +1159,8 @@ int mc_db_remove_playlist(const char *server_name, const char *playlist_name)
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *sql_str = NULL;
 
-       mc_retvm_if(server_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "server_name is NULL");
+       mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+       mc_retvm_if(!playlist_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid playlist_name");
 
        sql_str = g_strdup_printf("%s%s%s%s%s", MC_DB_CMD_REMOVE_PLAYLIST, MC_STRING_DELIMITER, server_name, MC_STRING_DELIMITER, playlist_name);
 
index 00d1e1682b2aeeddac4d1f7055cc36c26fe6b274..cfe695c9d50db7884332e5227bf44da0fd51c8e7 100644 (file)
@@ -44,6 +44,9 @@ static int __make_service_connection(mc_priv_type_e priv_type)
 
 static char *__make_key_for_map(const char *main_key, const char *sub_key)
 {
+       mc_retvm_if(!main_key, NULL, "Invalid main_key");
+       mc_retvm_if(!sub_key, NULL, "Invalid sub_key");
+
        return g_strdup_printf("%s.%s", main_key, sub_key);
 }
 
index 13d0b0e21975c4294a5879cbc35fb634fa478392..c52632d036b925082c26dc5088cc9eb88bec9da7 100755 (executable)
@@ -377,4 +377,3 @@ int mc_search_clone(mc_search_h src, mc_search_h *dst)
 
        return ret;
 }
-
index a58b68ceedd1ce22cc7b71112c58e4c555b575fa..004af8a17a20cb22ba583eae0bacc4d351b49f65 100755 (executable)
@@ -625,9 +625,10 @@ static int __mc_server_send_message(media_controller_server_s *mc_server, const
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        char *message = NULL;
 
-       mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
-       mc_retvm_if(interface_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "interface_name is NULL");
-       mc_retvm_if(signal_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "signal_name is NULL");
+       mc_retvm_if(!mc_server, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
+       mc_retvm_if(!mc_server->server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+       mc_retvm_if(!interface_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid interface_name");
+       mc_retvm_if(!signal_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid signal_name");
 
        if ((!g_strcmp0(MC_DBUS_SIGNAL_NAME_PLAY_BACK, signal_name))
                || (!g_strcmp0(MC_DBUS_SIGNAL_NAME_METADATA, signal_name))
@@ -638,10 +639,7 @@ static int __mc_server_send_message(media_controller_server_s *mc_server, const
        else
                message = g_strdup_printf("%s%s%d", mc_server->server_name, MC_STRING_DELIMITER, param1);
 
-       if (message == NULL) {
-               mc_error("Error when making message");
-               return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
-       }
+       mc_retvm_if(!message, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "Invalid message");
 
        ret = mc_ipc_send_message(mc_server->dconn, NULL, interface_name, signal_name, message, NULL);
        if (ret != MEDIA_CONTROLLER_ERROR_NONE)
index d9d1aef511f93959ed9e36f0e1533e86628d6588..00609bd47264ec7fe38fc35d77bc813e5866adc5 100755 (executable)
@@ -575,10 +575,9 @@ int mc_db_parse_and_update_db(uid_t uid, const char *data, int data_size)
        gchar **params = NULL;
        int i_value = 0;
        int i_value_1 = 0;
-       int i_value_2 = 0;
        unsigned long long llu_value = 0, llu_value2 = 0;
        void* _db_handle = NULL;
-       bool is_playlist = FALSE;
+       gboolean is_query_from_client = FALSE;
 
        mc_retvm_if(data == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "data is NULL");
        mc_retvm_if(data_size <= 0 , MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid data_size");
@@ -640,22 +639,12 @@ int mc_db_parse_and_update_db(uid_t uid, const char *data, int data_size)
                sql_str = sqlite3_mprintf(DB_UPDATE_STATE_PLAYBACK, params[1], i_value, i_value_1);
 
        } else if (strncmp(MC_DB_CMD_UPDATE_PLAYBACK, params[0], strlen(MC_DB_CMD_UPDATE_PLAYBACK)) == 0) {
-               if (params[2] == NULL || params[3] == NULL || params[4] == NULL || params[5] == NULL || params[6] == NULL) {
-                       mc_error("wrong query");
-                       ret = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
-                       goto ERROR;
-               }
-
-               mc_safe_strtoi(params[2], &i_value);
-               mc_safe_strtoull(params[3], &llu_value);
-               mc_safe_strtoi(params[6], &i_value_1);
-               mc_safe_strtoi(params[7], &i_value_2);
-               sql_str = sqlite3_mprintf("UPDATE '%q' SET playback_state=%d, playback_position=%llu, playlist_name=%Q, playlist_index=%Q, playback_content_type=%d, age_rating=%d;",
-                       params[1], i_value, llu_value, params[4], params[5], i_value_1, i_value_2);
+               sql_str = params[1];
+               is_query_from_client = TRUE;
 
        } else if (strncmp(MC_DB_CMD_UPDATE_META, params[0], strlen(MC_DB_CMD_UPDATE_META)) == 0) {
-               sql_str = sqlite3_mprintf("UPDATE '%q' SET title=%Q, artist=%Q, album=%Q, author=%Q, genre=%Q, duration=%Q, date=%Q, copyright=%Q, description=%Q, track_num=%Q, picture=%Q",
-                       params[1], params[2], params[3], params[4], params[5], params[6], params[7], params[8], params[9], params[10], params[11], params[12]);
+               sql_str = params[1];
+               is_query_from_client = TRUE;
 
        } else if (strncmp(MC_DB_CMD_UPDATE_SHUFFLE, params[0], strlen(MC_DB_CMD_UPDATE_SHUFFLE)) == 0) {
                if (params[2] == NULL) {
@@ -687,7 +676,7 @@ int mc_db_parse_and_update_db(uid_t uid, const char *data, int data_size)
                        goto ERROR;
                }
                sql_str = params[3];
-               is_playlist = TRUE;
+               is_query_from_client = TRUE;
 
        } else if (strncmp(MC_DB_CMD_UPDATE_ICON, params[0], strlen(MC_DB_CMD_UPDATE_ICON)) == 0) {
                if (params[2] == NULL) {
@@ -753,7 +742,7 @@ ERROR:
 
                mc_db_util_disconnect(_db_handle);
 
-               if (!is_playlist)
+               if (!is_query_from_client)
                        SQLITE3_SAFE_FREE(sql_str);
        }
 
index 78772d9f1d14b9166bb5239e8f3029c237280aad..109a647658bece771308dac2ebaa7601d58a40c6 100755 (executable)
@@ -100,6 +100,7 @@ static void __get_and_check_metadata(mc_metadata_h metadata)
                        mc_error("Fail to mc_metadata_get");
 
                mc_debug("metadata [%d] value [%s]\n", idx, value);
+
                MC_SAFE_FREE(value);
        }
 }
@@ -455,7 +456,6 @@ static gboolean _get_info(int type)
        mc_playback_states_e playback_state;
        unsigned long long playback_position;
        mc_metadata_h metadata;
-       char *metadata_value;
        mc_shuffle_mode_e shuffle_mode;
        mc_repeat_mode_e repeate_mode;
        char *playlist_name = NULL;
@@ -509,13 +509,7 @@ static gboolean _get_info(int type)
                ret = mc_client_get_server_metadata(g_mc_client, g_server_name, &metadata);
                mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_get_server_metadata [%d]", ret);
 
-               ret = mc_metadata_get(metadata, MC_META_MEDIA_TITLE, &metadata_value);
-               if (ret != MEDIA_CONTROLLER_ERROR_NONE)
-                       g_print("Fail to get infot");
-
-               g_print("metadata title: %s", metadata_value);
-
-               free(metadata_value);
+               __get_and_check_metadata(metadata);
 
                ret = mc_metadata_destroy(metadata);
                mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_metadata_destroy [%d]", ret);
index a28cdbb30f81562b9c7efdcb970f4d9a41655ed0..de069d817d4a6feba01881c565592b5f38da6ee2 100755 (executable)
@@ -85,11 +85,6 @@ int g_menu_send_event = 0;
 |    LOCAL FUNCTION PROTOTYPES:                       |
 ---------------------------------------------------------------------------*/
 
-void __playback_state_command_received_cb(const char *client_name, mc_playback_states_e state, void *user_data)
-{
-       g_print("[Deprecated] srecieved playback state:[%d] from [%s]\n", state, client_name);
-}
-
 void __playback_action_received_cb(const char *client_name, const char *request_id, mc_playback_action_e action, void *user_data)
 {
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
@@ -405,6 +400,8 @@ void __custom_cmd_received_cb(const char *client_name, const char *request_id, c
                bundle_get_str(data, "key4", &get_value4);
 
                bundle_data = g_strdup_printf("%s, %s, %s, %s", get_value1, get_value2, get_value3, get_value4);
+       } else {
+               g_print("No bundle data\n");
        }
 
        g_print("recieved request_id:[%s] command:[%s] from [%s]\n", request_id, command, client_name);
@@ -471,13 +468,7 @@ static gboolean _create()
 static gboolean _set_cb()
 {
        g_print("== set default callback for commands \n");
-       int ret;
-
-       ret = mc_server_set_playback_state_command_received_cb(g_mc_server, __playback_state_command_received_cb, NULL);
-       if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
-               g_print("Fail to set playback_state_command_reciveed_cb");
-               return FALSE;
-       }
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
 
        ret = mc_server_set_playback_action_cmd_received_cb(g_mc_server, __playback_action_received_cb, NULL);
        if (ret != MEDIA_CONTROLLER_ERROR_NONE) {