From aa66aa96505f3e9d7782276af0d84b98ee56d5c3 Mon Sep 17 00:00:00 2001 From: oetiker Date: Mon, 2 Apr 2007 06:18:15 +0000 Subject: [PATCH] make xml2rrd more robust on invalid input -- Florian Forster git-svn-id: svn://svn.oetiker.ch/rrdtool/branches/1.2@1027 a5681a0c-68f1-0310-ab6d-d61299d08faa --- program/src/rrd_restore.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/program/src/rrd_restore.c b/program/src/rrd_restore.c index 96ab6496..1adf0747 100644 --- a/program/src/rrd_restore.c +++ b/program/src/rrd_restore.c @@ -64,7 +64,9 @@ int skipxml(char **buf){ } int skip(char **buf){ - char *ptr; + char *ptr; + if ((buf == NULL) || (*buf == NULL)) + return -1; ptr=(*buf); do { (*buf)=ptr; @@ -237,7 +239,7 @@ int xml2rrd(char* buf, rrd_t* rrd, char rc){ if((rrd->cdp_prep = rrd_realloc(rrd->cdp_prep, rrd->stat_head->rra_cnt *rrd->stat_head->ds_cnt*sizeof(cdp_prep_t)))==NULL){ - rrd_set_error("allocating cdp_prep"); return -1; } + rrd_set_error("allocating cdp_prep"); return -1; } memset(&(rrd->cdp_prep[rrd->stat_head->ds_cnt*(rrd->stat_head->rra_cnt-1)]), 0, rrd->stat_head->ds_cnt*sizeof(cdp_prep_t)); @@ -254,7 +256,10 @@ int xml2rrd(char* buf, rrd_t* rrd, char rc){ read_tag(&ptr2, "xff","%lf", &(rrd->rra_def[rra_index].par[RRA_cdp_xff_val].u_val)); } else { - eat_tag(&ptr2, "params"); + if (eat_tag(&ptr2, "params") != 1) { + rrd_set_error("could not find params tag to eat and skip"); + return -1; + } skip(&ptr2); /* backwards compatibility w/ old patch */ if (strncmp(ptr2, "",7) == 0) { -- 2.30.2