]> git.itanic.dy.fi Git - rrdd/commitdiff
parser: Define maximum length for the rrd data
authorTimo Kokkonen <kaapeli@itanic.dy.fi>
Fri, 11 Mar 2011 13:50:43 +0000 (15:50 +0200)
committerTimo Kokkonen <kaapeli@itanic.dy.fi>
Fri, 11 Mar 2011 13:50:43 +0000 (15:50 +0200)
This makes makes buffer overruns harder.

Signed-off-by: Timo Kokkonen <kaapeli@itanic.dy.fi>
parser.c
parser.h
rrdtool.c

index f393fed2dd59be0ae86d722bec84c11d03d2d17c..9ebb4cde66129ae53cf041fb05ce76641e4b76d1 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -36,7 +36,7 @@ int cpu_parser(char *data, void *p)
        irq     = dec_to_longlong(str, &str);
        softirq = dec_to_longlong(str, &str);
 
-       sprintf(data, "%lld:%lld:%lld:%lld:%lld:%lld:%lld",
+       snprintf(data, RRD_DATA_MAX_LEN, "%lld:%lld:%lld:%lld:%lld:%lld:%lld",
                user, nice, sys, idle, wait, irq, softirq);
 
        fclose(file);
@@ -84,7 +84,7 @@ int mem_parser(char *data, void *p)
        }
        fclose(file);
 
-       sprintf(data, "%f:%f:%f:%f:%f:%f:%f:%f:%f:%f",
+       snprintf(data, RRD_DATA_MAX_LEN, "%f:%f:%f:%f:%f:%f:%f:%f:%f:%f",
                free / 1024.0,
                buffered / 1024.0,
                cache / 1024.0,
@@ -105,7 +105,7 @@ int cpu_mem_parser(char *data, void *p)
 
        cpu_parser(cpu, p);
        mem_parser(mem, p);
-       sprintf(data, "%s:%s", cpu, mem);
+       snprintf(data, RRD_DATA_MAX_LEN, "%s:%s", cpu, mem);
 
        return 0;
 }
@@ -143,7 +143,7 @@ int digitemp_parser(char *data, void *p)
        while (fgets(buf, 1024, readf));
 
        harvest_zombies(pid);
-       sprintf(data, "%.2f:%.2f", t3, t2);
+       snprintf(data, RRD_DATA_MAX_LEN, "%.2f:%.2f", t3, t2);
        return 0;
 }
 
@@ -153,7 +153,7 @@ int digitemp_parser_mod(char *data, void *p)
        int ret;
 
        ret = digitemp_parser(buf, p);
-       sprintf(data, "U:%s", buf);
+       snprintf(data, RRD_DATA_MAX_LEN, "U:%s", buf);
 
        return ret;
 }
index 6807aece02cf06a434d7fecab3b6bebcc8859040..ecabb447327df3746d9042dfe8813a3f53a03948 100644 (file)
--- a/parser.h
+++ b/parser.h
@@ -1,6 +1,8 @@
 #ifndef _PARSER_H
 #define _PARSER_H
 
+#define RRD_DATA_MAX_LEN       4096
+
 int cpu_parser(char *data, void *p);
 int mem_parser(char *data, void *p);
 int cpu_mem_parser(char *data, void *p);
index 2f1985e3dfee6cf51e4e4953d22046dfb7e1cde1..e560041917b8253632c3695fbc947f0d66f1568c 100644 (file)
--- a/rrdtool.c
+++ b/rrdtool.c
@@ -7,6 +7,7 @@
 
 #include "rrdtool.h"
 #include "process.h"
+#include "parser.h"
 
 #define MAX_ARGS       512
 #define ARGSTR_LEN     32768
@@ -92,7 +93,7 @@ int rrdtool_draw_images(struct rrd_image **image)
 
 int rrdtool_update_data(struct rrd_database *rrd)
 {
-       char data[1024];
+       char data[RRD_DATA_MAX_LEN];
        char cmd[] = RRDTOOL_CMD;
 //     char cmd[] = "echo";
        char *cmdline[] = {