From d641275bae8f901d4822bba019241cbf5f3fa09b Mon Sep 17 00:00:00 2001 From: oetiker Date: Mon, 16 Nov 2009 14:59:51 +0000 Subject: [PATCH] be more diligent in checking the input arguments for rrdtool update and complain if they are wrong. fix for #243 (and more) --This line, and those below, will be ignored- M trunk/program/src/rrd_update.c M branches/1.3/program/src/rrd_update.c git-svn-id: svn://svn.oetiker.ch/rrdtool/branches/1.3@1973 a5681a0c-68f1-0310-ab6d-d61299d08faa --- program/src/rrd_update.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/program/src/rrd_update.c b/program/src/rrd_update.c index dbafa3b6..4baa5258 100644 --- a/program/src/rrd_update.c +++ b/program/src/rrd_update.c @@ -884,12 +884,16 @@ static int parse_ds( if (i < tmpl_cnt) { updvals[tmpl_idx[i++]] = p + 1; } + else { + rrd_set_error("found extra data on update argument: %s",p+1); + return -1; + } } } if (i != tmpl_cnt) { rrd_set_error("expected %lu data source readings (got %lu) from %s", - tmpl_cnt - 1, i, input); + tmpl_cnt - 1, i - 1, input); return -1; } @@ -1018,10 +1022,20 @@ static int update_pdp_prep( switch (dst_idx) { case DST_COUNTER: case DST_DERIVE: - for (ii = 0; updvals[ds_idx + 1][ii] != '\0'; ii++) { - if ((updvals[ds_idx + 1][ii] < '0' - || updvals[ds_idx + 1][ii] > '9') - && (ii != 0 && updvals[ds_idx + 1][ii] != '-')) { + if ( ( updvals[ds_idx + 1][0] < '0' + || updvals[ds_idx + 1][0] > '9' ) + && updvals[ds_idx + 1][0] != '-' + && updvals[ds_idx + 1][0] != 'U' + && updvals[ds_idx + 1][0] == '\0' + ) { + rrd_set_error("not a simple integer: '%s'", + updvals[ds_idx + 1]); + return -1; + } + for (ii = 1; updvals[ds_idx + 1][ii] != '\0'; ii++) { + if ( updvals[ds_idx + 1][ii] < '0' + || updvals[ds_idx + 1][ii] > '9' + ) { rrd_set_error("not a simple integer: '%s'", updvals[ds_idx + 1]); return -1; -- 2.30.2