Unify dulicated code regarding checking msg validity 84/222584/3 accepted/tizen/unified/20200117.120752 submit/tizen/20200117.053521
authorhj kim <backto.kim@samsung.com>
Thu, 16 Jan 2020 08:49:35 +0000 (17:49 +0900)
committerhj kim <backto.kim@samsung.com>
Fri, 17 Jan 2020 01:26:38 +0000 (10:26 +0900)
Change-Id: I10f8eb1e001ce6f2cf118502ae0f4c50c845302c

lib/include/media-util-ipc.h
lib/media-util-cynara.c
lib/media-util-db.c
lib/media-util-ipc.c
lib/media-util-register.c

index a67ea17..a0d035e 100755 (executable)
@@ -29,6 +29,7 @@ extern "C" {
 #include <sys/un.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
+#include <stdbool.h>
 
 #include "media-server-ipc.h"
 
@@ -50,6 +51,7 @@ int ms_ipc_create_server_socket(ms_msg_port_type_e port, int *sock_fd);
 int ms_ipc_send_msg_to_server_tcp(int sockfd, ms_msg_port_type_e port, ms_comm_msg_s *send_msg, struct sockaddr_un *serv_addr);
 int ms_ipc_send_msg_to_client_tcp(int sockfd, ms_comm_msg_s *send_msg, struct sockaddr_un *client_addr);
 int ms_ipc_accept_client_tcp(int serv_sock, int* client_sock);
+bool ms_ipc_is_valid_msg(const char *msg);
 
 #ifdef __cplusplus
 }
index c12721d..1068744 100755 (executable)
@@ -102,12 +102,9 @@ int ms_cynara_receive_untrusted_message(int sockfd, ms_comm_msg_s *recv_msg, ms_
                return MS_MEDIA_ERR_IPC;
        }
 
-       MSAPI_DBG_SLOG("receive msg from P[%d] T[%d] M[%.*s] S[%.*s]", recv_msg->pid, recv_msg->msg_type, MAX_MSG_SIZE, recv_msg->msg, MS_UUID_SIZE, recv_msg->storage_id);
+       MSAPI_RETVM_IF(!ms_ipc_is_valid_msg(recv_msg->msg), MS_MEDIA_ERR_IPC, "Invalid msg");
 
-       if (strlen(recv_msg->msg) == 0 || strlen(recv_msg->msg) >= MAX_MSG_SIZE) {
-               MSAPI_DBG_ERR("IPC message is wrong. message size is over MAX_MSG_SIZE");
-               return MS_MEDIA_ERR_IPC;
-       }
+       MSAPI_DBG_SLOG("receive msg from P[%d] T[%d] M[%.*s] S[%.*s]", recv_msg->pid, recv_msg->msg_type, MAX_MSG_SIZE, recv_msg->msg, MS_UUID_SIZE, recv_msg->storage_id);
 
        if (strlen(recv_msg->storage_id) >= MS_UUID_SIZE) {
                MSAPI_DBG_ERR("IPC message is wrong. storage_id size is over MS_UUID_SIZE");
index 3a1707e..b7025ae 100755 (executable)
@@ -228,21 +228,11 @@ extern char MEDIA_IPC_PATH[][70];
 static int __media_db_request_update_tcp(ms_msg_type_e msg_type, const char *request_msg, uid_t uid)
 {
        int ret = MS_MEDIA_ERR_NONE;
-       int request_msg_size = 0;
        int sockfd = -1;
        struct sockaddr_un serv_addr;
        int retry_count = 0;
 
-       if (!MS_STRING_VALID(request_msg)) {
-               MSAPI_DBG_ERR("invalid query");
-               return MS_MEDIA_ERR_INVALID_PARAMETER;
-       }
-
-       request_msg_size = strlen(request_msg);
-       if (request_msg_size >= MAX_MSG_SIZE) {
-               MSAPI_DBG_ERR("Too long query[%d] limit[%d]", request_msg_size, MAX_MSG_SIZE);
-               return MS_MEDIA_ERR_INVALID_PARAMETER;
-       }
+       MSAPI_RETVM_IF(!ms_ipc_is_valid_msg(request_msg), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid request_msg");
 
        ms_comm_msg_s send_msg;
        memset((void *)&send_msg, 0, sizeof(ms_comm_msg_s));
@@ -454,7 +444,6 @@ int media_db_update_db(sqlite3 *handle, const char *query_str)
 static int __media_db_request_recovery(uid_t uid)
 {
        int ret = MS_MEDIA_ERR_NONE;
-       int request_msg_size = 0;
        int sockfd = -1;
        struct sockaddr_un serv_addr;
        int retry_count = 0;
@@ -463,15 +452,11 @@ static int __media_db_request_recovery(uid_t uid)
        ret = ms_user_get_media_db_path(uid, &db_path);
        MSAPI_RETVM_IF(ret != MS_MEDIA_ERR_NONE, MS_MEDIA_ERR_INVALID_PARAMETER, "ms_user_get_media_db_path failed");
 
-       request_msg_size = strlen(db_path);
-       if (request_msg_size >= MAX_MSG_SIZE) {
-               MSAPI_DBG_ERR("Too long query[%d] limit[%d]", request_msg_size, MAX_MSG_SIZE);
+       if (!ms_ipc_is_valid_msg(db_path)) {
                MS_SAFE_FREE(db_path);
                return MS_MEDIA_ERR_INVALID_PARAMETER;
        }
 
-       /*      MSAPI_DBG("querysize[%d] query[%s]", request_msg_size, request_msg); */
-
        ms_comm_msg_s send_msg;
        memset((void *)&send_msg, 0, sizeof(ms_comm_msg_s));
 
index cdb82e8..5e1f236 100755 (executable)
@@ -179,3 +179,15 @@ int ms_ipc_accept_client_tcp(int serv_sock, int* client_sock)
 
        return MS_MEDIA_ERR_NONE;
 }
+
+bool ms_ipc_is_valid_msg(const char *msg)
+{
+       MSAPI_RETVM_IF(!MS_STRING_VALID(msg), false, "Invalid msg");
+
+       if (strlen(msg) >= MAX_MSG_SIZE) {
+               MSAPI_DBG_ERR("msg is too long. [%zu] msg size limit is [%d]", strlen(msg), MAX_MSG_SIZE);
+               return false;
+       }
+
+       return true;
+}
index e76798f..93dda7b 100755 (executable)
@@ -90,17 +90,15 @@ gboolean _read_socket(GIOChannel *src, GIOCondition condition, gpointer data)
                MSAPI_DBG_STRERROR("recv failed");
                return G_SOURCE_REMOVE;
        }
-       if (strlen(recv_msg.msg) > 0 && strlen(recv_msg.msg) < MAX_MSG_SIZE) {
-               req_result.complete_path = g_strdup(recv_msg.msg);
-               MSAPI_DBG("complete_path :%s", req_result.complete_path);
-       } else {
-               MSAPI_DBG("The message is invalid!");
-               return G_SOURCE_REMOVE;
-       }
 
+       MSAPI_RETVM_IF(!ms_ipc_is_valid_msg(recv_msg.msg), G_SOURCE_REMOVE, "Invalid msg");
+
+       req_result.complete_path = g_strdup(recv_msg.msg);
        req_result.pid = recv_msg.pid;
        req_result.result = recv_msg.result;
 
+       MSAPI_DBG("complete_path :%s", req_result.complete_path);
+
        switch (recv_msg.msg_type) {
        case MS_MSG_SCANNER_RESULT:
                req_result.request_type = MEDIA_DIRECTORY_SCAN;
@@ -342,19 +340,11 @@ static int __media_db_request_update_async(ms_msg_type_e msg_type, const char *s
        ms_comm_msg_s send_msg;
        char *request_path = NULL;
 
-       if (!MS_STRING_VALID(request_msg)) {
-               MSAPI_DBG_ERR("invalid query");
-               return MS_MEDIA_ERR_INVALID_PARAMETER;
-       }
+       MSAPI_RETVM_IF(!ms_ipc_is_valid_msg(request_msg), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid request_msg");
 
        MSAPI_DBG("REQUEST UPDATE ASYNC [%d][%s]", msg_type, request_msg);
 
        request_msg_size = strlen(request_msg);
-       if (request_msg_size >= MAX_MSG_SIZE) {
-               MSAPI_DBG_ERR("Query is Too long. [%d] query size limit is [%d]", request_msg_size, MAX_MSG_SIZE);
-               return MS_MEDIA_ERR_INVALID_PARAMETER;
-       }
-
        if (request_msg[request_msg_size - 1] == '/') {
                request_path = g_strndup(request_msg, request_msg_size - 1);
                request_msg_size = request_msg_size - 1;
@@ -403,19 +393,11 @@ static int __media_db_request_update_cancel(ms_msg_type_e msg_type, const char *
        ms_comm_msg_s send_msg;
        char *request_path = NULL;
 
-       if (!MS_STRING_VALID(request_msg)) {
-               MSAPI_DBG_ERR("invalid query");
-               return MS_MEDIA_ERR_INVALID_PARAMETER;
-       }
+       MSAPI_RETVM_IF(!ms_ipc_is_valid_msg(request_msg), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid request_msg");
 
        MSAPI_DBG("REQUEST CANCEL DIRECTORY SCANNING[%s]", request_msg);
 
        request_msg_size = strlen(request_msg);
-       if (request_msg_size >= MAX_MSG_SIZE) {
-               MSAPI_DBG_ERR("Too long msg:query length[%d] limit[%d]", request_msg_size, MAX_MSG_SIZE);
-               return MS_MEDIA_ERR_INVALID_PARAMETER;
-       }
-
        if (request_msg[request_msg_size - 1] == '/') {
                request_path = g_strndup(request_msg, request_msg_size - 1);
                request_msg_size = request_msg_size - 1;