jshn: fix off by one in jshn_parse_file
authorPetr Štetiar <ynezz@true.cz>
Sat, 23 Nov 2019 21:48:25 +0000 (22:48 +0100)
committerPetr Štetiar <ynezz@true.cz>
Sun, 24 Nov 2019 12:26:58 +0000 (13:26 +0100)
Fixes following error:

 Invalid read of size 1
   at 0x4C32D04: strlen
   by 0x5043367: json_tokener_parse_ex
   by 0x5045316: json_tokener_parse_verbose
   by 0x504537D: json_tokener_parse
   by 0x401AB1: jshn_parse (jshn.c:179)
   by 0x40190D: jshn_parse_file (jshn.c:370)
   by 0x40190D: main (jshn.c:434)
 Address 0x5848c4c is 0 bytes after a block of size 1,036 alloc'd
   at 0x4C2FB0F: malloc
   by 0x4018E2: jshn_parse_file (jshn.c:357)
   by 0x4018E2: main (jshn.c:434)

Signed-off-by: Petr Štetiar <ynezz@true.cz>
jshn.c

diff --git a/jshn.c b/jshn.c
index 963995191a0f16ffd583a81ccb09378e953377dc..28cfa8df7a21c0c7f97258812b3698d2dfc107b9 100644 (file)
--- a/jshn.c
+++ b/jshn.c
@@ -354,7 +354,7 @@ static int jshn_parse_file(const char *path)
                return 3;
        }
 
                return 3;
        }
 
-       if (!(fbuf = malloc(sb.st_size))) {
+       if (!(fbuf = calloc(1, sb.st_size+1))) {
                fprintf(stderr, "Error allocating memory for %s\n", path);
                close(fd);
                return 3;
                fprintf(stderr, "Error allocating memory for %s\n", path);
                close(fd);
                return 3;