]> git.itanic.dy.fi Git - rrdd/blobdiff - built_in_parsers.c
built_in_parsers: Strenghten string handling
[rrdd] / built_in_parsers.c
index 5ee045b3db09f7037fd89bc385f8a0ccf1ea18ff..8d7bdb15c1ca9760246e8bd83630b9b0318cac51 100644 (file)
@@ -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);