From: DaiYoung Kim Date: Fri, 19 Apr 2013 06:45:49 +0000 (+0900) Subject: emuld : a few prevent issues fixed X-Git-Tag: submit/tizen/20150527.025434~17^2~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=18b8d76c219b259b7183fa8cced6e24f9aee201c;p=platform%2Fadaptation%2Femulator%2Femulator-daemon.git emuld : a few prevent issues fixed Signed-off-by: DaiYoung, Kim --- diff --git a/packaging/emuld.spec b/packaging/emuld.spec old mode 100644 new mode 100755 index 32ae64b..a89fcc8 --- a/packaging/emuld.spec +++ b/packaging/emuld.spec @@ -1,6 +1,6 @@ #git:/slp/pkgs/e/emulator-daemon Name: emuld -Version: 0.2.34 +Version: 0.2.35 Release: 1 Summary: emuld is used for communication emulator between and ide. License: Apache diff --git a/src/emuld.c b/src/emuld.c old mode 100644 new mode 100755 index 508a52e..239dce2 --- a/src/emuld.c +++ b/src/emuld.c @@ -578,28 +578,33 @@ int recv_data(int event_fd, char** r_databuf, int size) int len = 0; int getcnt = 0; char* r_tmpbuf = NULL; + const int alloc_size = sizeof(char) * size + 1; - r_tmpbuf = (char*)malloc(sizeof(char) * size + 1); - if(r_tmpbuf == NULL){ + r_tmpbuf = (char*)malloc(alloc_size); + if(r_tmpbuf == NULL) + { return -1; } - *r_databuf = (char*)malloc(sizeof(char) * size + 1); - if(*r_databuf == NULL){ + char* databuf = (char*)malloc(alloc_size); + if(databuf == NULL) + { free(r_tmpbuf); + *r_databuf = NULL; return -1; } - memset(*r_databuf, '\0', sizeof(char) * size + 1); + + memset(databuf, '\0', sizeof(*databuf)); while(recvd_size < size) { - memset(r_tmpbuf, '\0', sizeof(char) * size + 1); + memset(r_tmpbuf, '\0', sizeof(*r_tmpbuf)); len = recv(event_fd, r_tmpbuf, size - recvd_size, 0); if (len < 0) { break; } - memcpy((*r_databuf) + recvd_size, r_tmpbuf, len); + memcpy(databuf + recvd_size, r_tmpbuf, len); recvd_size += len; getcnt++; if(getcnt > MAX_GETCNT) { @@ -609,6 +614,8 @@ int recv_data(int event_fd, char** r_databuf, int size) free(r_tmpbuf); r_tmpbuf = NULL; + *r_databuf = databuf; + return recvd_size; } @@ -638,22 +645,22 @@ void client_recv(int event_fd) { char* r_databuf = NULL; char tmpbuf[48]; - int len, recvd_size, parse_len = 0; + int len = 0, recvd_size = 0, parse_len = 0; + + if (event_fd == -1) { + LOG("invalid event fd"); + return; + } + LXT_MESSAGE* packet = (LXT_MESSAGE*)malloc(sizeof(LXT_MESSAGE)); - if (packet == NULL) - { + if (!packet) return; - } - memset(packet, 0, sizeof(LXT_MESSAGE)); + + memset(packet, 0, sizeof(*packet)); LOG("start (event fd: %d)", event_fd); /* there need to be more precise code here */ /* for example , packet check(protocol needed) , real recv size check , etc. */ - if (event_fd == -1) { - free(packet); - packet = NULL; - return; - } // vmodem to event injector if(event_fd == g_vm_sockfd) @@ -677,48 +684,36 @@ void client_recv(int event_fd) } LOG("vmodem header recv buffer: %s", r_databuf); - memcpy((void*)packet, (void*)r_databuf, sizeof(char) * HEADER_SIZE); + memcpy((void*)packet, (void*)r_databuf, HEADER_SIZE); LOG("first packet of vmodem to event injector %s", r_databuf); free(r_databuf); r_databuf = NULL; if(g_sdbd_sockfd != -1) - len = send(g_sdbd_sockfd, (void*)packet, sizeof(char) * HEADER_SIZE, 0); - - LOG("send_len: %d, next packet length: %d", len, packet->length); - - if(packet->length <= 0) { - free(packet); - packet = NULL; - return; - } - - if(g_sdbd_sockfd != -1) - recvd_size = recv_data(event_fd, &r_databuf, packet->length); - else - { - // for packet clear - recvd_size = recv_data(event_fd, &r_databuf, packet->length); - return; + len = send(g_sdbd_sockfd, (void*)packet, sizeof(char) * HEADER_SIZE, 0); + LOG("send_len: %d, next packet length: %d", len, packet->length); } - - LOG("recv_len: %d, vmodem data recv buffer: %s", recvd_size, r_databuf); - - if(recvd_size <= 0) + + if (packet->length > 0) { - free(r_databuf); - r_databuf = NULL; - free(packet); - packet = NULL; - return; + if (g_sdbd_sockfd != -1) + { + recvd_size = recv_data(event_fd, &r_databuf, packet->length); + LOG("recv_len: %d, vmodem data recv buffer: %s", recvd_size, r_databuf); + if (recvd_size > 0) + { + len = send(g_sdbd_sockfd, r_databuf, packet->length, 0); + LOG("send_len: %d", len); + } + } + else + { + // for packet clear + recvd_size = recv_data(event_fd, &r_databuf, packet->length); + } } - - if(g_sdbd_sockfd != -1) - len = send(g_sdbd_sockfd, r_databuf, packet->length, 0); - - LOG("send_len: %d", len); } else // event injector to vmodem, sensord or gpsd {