[FIX] get_string() 42/13842/3
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Fri, 13 Dec 2013 13:32:10 +0000 (17:32 +0400)
committerNikita Kalyazin <n.kalyazin@samsung.com>
Tue, 7 Jan 2014 05:36:21 +0000 (21:36 -0800)
correct parsing of strings without null symbol

Change-Id: I4ffd03ec88d81227d4ca261be18c329d46e86043
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
parser/msg_buf.c

index 031215e..3520874 100644 (file)
@@ -114,19 +114,22 @@ int get_u64(struct msg_buf *mb, u64 *val)
 int get_string(struct msg_buf *mb, char **str)
 {
        size_t len, len_max;
+       enum { min_len_str = 1 };
 
-       len_max = mb->end - mb->ptr - 1;
-       if(len_max < 0)
+       if (cmp_mb(mb, min_len_str) < 0)
                return -EINVAL;
 
-       len = strlen(mb->ptr) + 1;
+       len_max = remained_mb(mb) - 1;
+       len = strnlen(mb->ptr, len_max);
 
-       *str = kmalloc(len, GFP_KERNEL);
+       *str = kmalloc(len + 1, GFP_KERNEL);
        if (*str == NULL)
                return -ENOMEM;
 
        memcpy(*str, mb->ptr, len);
-       mb->ptr += len;
+       (*str)[len] = '\0';
+
+       mb->ptr += len + 1;
 
        print_parse_debug("str->'%s'\n", *str);
        return 0;