Update message parsing error handling 76/199476/4
authorYoungHun Kim <yh8004.kim@samsung.com>
Tue, 12 Feb 2019 01:58:35 +0000 (10:58 +0900)
committerYoungHun Kim <yh8004.kim@samsung.com>
Thu, 14 Feb 2019 11:37:23 +0000 (11:37 +0000)
 - Add mutex lock to avoid race condition
 - Do not dispatch after module index error case

Change-Id: I85e94353559d780e55d9cb5096f33e4967a2b53b

client/src/muse_client.c
core/src/muse_core.c
packaging/mused.spec
server/src/muse_server_ipc.c

index e591357..f709f7b 100644 (file)
@@ -257,7 +257,8 @@ int muse_client_ipc_push_data(int sock_fd, const char *data, int size, uint64_t
        header.size = size;
        header.id = data_id;
 
-       LOGD("[%d] header.marker : %x header.size : %d header.id : %"G_GUINT64_FORMAT"", sock_fd, header.marker, header.size, header.id);
+       LOGD("[%d] header.marker : %x header.size : %d header.id : %"G_GUINT64_FORMAT"",
+                       sock_fd, header.marker, header.size, header.id);
 
        if ((sended_len = send(sock_fd, &header, sizeof(muse_recv_data_head_t), 0)) < 0) {
                strerror_r(errno, err_msg, MUSE_MSG_LEN_MAX);
index a875f8e..4df32b9 100644 (file)
@@ -76,6 +76,7 @@ static json_object *_muse_msg_json_tokener_parse_len(const char *str, int *len,
 {
        struct json_tokener *tok = NULL;
        struct json_object *obj = NULL;
+       int str_len = 0;
 
        muse_return_val_if_fail(str, NULL);
 
@@ -88,10 +89,11 @@ static json_object *_muse_msg_json_tokener_parse_len(const char *str, int *len,
                goto out;
        }
 
-       obj = json_tokener_parse_ex(tok, str, strlen(str));
+       str_len = strlen(str);
+       obj = json_tokener_parse_ex(tok, str, str_len);
 
        if (!obj) {
-               LOGE("parsing error : %s", str);
+               LOGE("parsing error : [length : %d] %s", str_len, str);
                goto out;
        }
 
@@ -343,7 +345,8 @@ int muse_core_msg_send_fd(int sock_fd, int *fds, const char *buf)
        ret = send(sock_fd, &msg_info, sizeof(muse_msg_info_t), 0);
        if (ret != sizeof(muse_msg_info_t)) {
                strerror_r(errno, err_msg, MUSE_MSG_LEN_MAX);
-               LOGE("msg info [type : %s size : %d] send failed : %d [error %s %d]", msg_type[msg_info.type], msg_info.size, ret, err_msg, errno);
+               LOGE("msg info [type : %s size : %d] send failed : %d [error %s %d]",
+                               msg_type[msg_info.type], msg_info.size, ret, err_msg, errno);
 
                goto _MSG_SEND_DONE;
        }
@@ -522,6 +525,8 @@ bool muse_core_msg_deserialize(const char *key, char *buf, int *parse_len, muse_
                return false;
        }
 
+       g_mutex_lock(&msg_lock);
+
        j_type = json_object_get_type(val);
        switch (j_type) {
        case json_type_null:
@@ -541,6 +546,7 @@ bool muse_core_msg_deserialize(const char *key, char *buf, int *parse_len, muse_
                } else if (m_type == MUSE_TYPE_POINTER) {
                        if (!_muse_msg_is_mem_ptr_valid(val)) {
                                json_object_put(jobj);
+                               g_mutex_unlock(&msg_lock);
                                LOGE("memory pointer is not valid");
                                return false;
                        }
@@ -569,6 +575,9 @@ bool muse_core_msg_deserialize(const char *key, char *buf, int *parse_len, muse_
        }
 
        json_object_put(jobj);
+
+       g_mutex_unlock(&msg_lock);
+
        return true;
 }
 
index 35f8b4d..6f8807c 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mused
 Summary:    A multimedia daemon
-Version:    0.3.67
+Version:    0.3.68
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0 and BSD-3-Clause
index ec74017..932d3bf 100644 (file)
@@ -186,6 +186,11 @@ static gpointer _ms_ipc_dispatch_worker(gpointer data)
                                                        g_mutex_init(&m->ch[MUSE_CHANNEL_DATA].data_mutex);
                                                        g_cond_init(&m->ch[MUSE_CHANNEL_DATA].data_cond);
                                                        value = ms_module_get_loaded_dllsym(idx);
+                                               } else {
+                                                       LOGE("Failed to get the value of module index");
+                                                       ms_cmd_dispatch(m, MUSE_MODULE_COMMAND_DEBUG_INFO_DUMP);
+                                                       attempt_to_dispatch = FALSE;
+                                                       break;
                                                }
                                        }