Check the packet length while parsing it.
authorSung-jae Park <nicesj.park@samsung.com>
Thu, 26 Jul 2012 09:15:58 +0000 (18:15 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Thu, 26 Jul 2012 10:18:49 +0000 (19:18 +0900)
Change-Id: Iac9a811ca3667b5101b71c63a2cf350680941f0b

CMakeLists.txt
src/com-core_packet.c
src/packet.c
src/secure_socket.c

index 60cc4c4..61eb788 100644 (file)
@@ -23,8 +23,8 @@ FOREACH(flag ${pkgs_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
 ENDFOREACH(flag)
 
-SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -g")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -g -Wall -Werror -Winline")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
 
 ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
 ADD_DEFINITIONS("-DLOG_TAG=\"${PROJECT_NAME}\"")
index 1c79f2b..dc96339 100644 (file)
@@ -4,6 +4,7 @@
 #include <unistd.h>
 #include <stdlib.h>
 #include <fcntl.h>
+#include <sys/time.h>
 
 #include <glib.h>
 #include <dlog.h>
index d511316..efaa45d 100644 (file)
@@ -299,7 +299,7 @@ EAPI struct packet *packet_create_noack(const char *cmd, const char *fmt, ...)
        result->data->head.seq = s_info.seq++;
        result->data->head.type = PACKET_REQ_NOACK;
        result->data->head.version = PACKET_VERSION;
-       strcpy(result->data->head.command, cmd);
+       strncpy(result->data->head.command, cmd, sizeof(result->data->head.command));
        result->data->head.payload_size = 0;
        payload_size -= sizeof(*result->data);
 
@@ -327,7 +327,7 @@ EAPI int packet_get(const struct packet *packet, const char *fmt, ...)
        va_start(va, fmt);
 
        ptr = fmt;
-       while (*ptr) {
+       while (*ptr && offset < packet->data->head.payload_size) {
                payload = packet->data->payload + offset;
                switch (*ptr) {
                case 'i':
index e43b71e..eabd5ee 100644 (file)
@@ -154,6 +154,11 @@ EAPI int secure_socket_send(int handle, const char *buffer, int size)
        struct iovec iov;
        int ret;
 
+       if (!buffer || size <= 0) {
+               ErrPrint("Reject: 0 byte data sending\n");
+               return -1;
+       }
+
        memset(&msg, 0, sizeof(msg));
        iov.iov_base = (char *)buffer;
        iov.iov_len = size;
@@ -180,7 +185,7 @@ EAPI int secure_socket_recv(int handle, char *buffer, int size, int *sender_pid)
        struct iovec iov;
        char control[1024];
 
-       if (!sender_pid)
+       if (!sender_pid || size <= 0 || !buffer)
                return -1;
 
        memset(&msg, 0, sizeof(msg));