From 3c0afcc5dbf5d8a7eaa2104bfb2532ff5bbdddeb Mon Sep 17 00:00:00 2001 From: Timo Kokkonen Date: Sat, 9 Jul 2016 13:13:33 +0300 Subject: [PATCH] built_in_parsers: Strenghten string handling Replace all hard coded string lengths with sizeof(). Make sure data is null terminated on script_parser(). Signed-off-by: Timo Kokkonen --- built_in_parsers.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/built_in_parsers.c b/built_in_parsers.c index 5ee045b..8d7bdb1 100644 --- a/built_in_parsers.c +++ b/built_in_parsers.c @@ -23,7 +23,7 @@ static int cpu_parser(char *data, const char **p) return -1; } - if (!fgets(buf, 1024, file)) { + if (!fgets(buf, sizeof(buf), file)) { pr_err("Failed to read file %s\n", STATFILE); fclose(file); return -1; @@ -59,8 +59,8 @@ static int mem_parser(char *data, const char **p) return -1; } - while (fgets(buf, 1024, file)) { - get_word(buf, 0, word, 1024); + while (fgets(buf, sizeof(buf), file)) { + get_word(buf, 0, word, sizeof(word)); if (!strcmp(word, "MemFree:")) { free = dec_to_int(buf, NULL); @@ -108,7 +108,7 @@ static int mem_parser(char *data, const char **p) int cpu_mem_parser(char *data, const char **p) { - char cpu[1024], mem[1024]; + char cpu[RRD_DATA_MAX_LEN], mem[RRD_DATA_MAX_LEN]; cpu_parser(cpu, p); mem_parser(mem, p); @@ -172,9 +172,16 @@ static int script_parser(char *rrd_data, const char **parser_data) char **cmd = tmp; pid = run_piped_stream(cmd[0], &cmd[1], NULL, &readf, NULL); - ret = fread(rrd_data, 1, RRD_DATA_MAX_LEN, readf); + ret = fread(rrd_data, 1, RRD_DATA_MAX_LEN - 1, readf); + if (ret < 0) { + pr_err("Error on read: %m\n"); + goto err_read; + } + rrd_data[ret] = 0; pr_info("Read %d bytes :%s\n", ret, rrd_data); + +err_read: fclose(readf); harvest_zombies(pid); -- 2.44.0