check_snmp: Fix support for inverse thresholds

Commit bd78299056 reintroduced support for
inverse threshold ranges such as "2:1", but it broke standard thresholds
such as "1:2" (by converting this range into "1") or "1:" (by converting
this range into "@:2").  This commit fixes those two bugs, plus an
off-by-one error while computing the number of bytes to allocate when
handling inverse thresholds (two additional bytes were allocated where
three were required to hold '@' and ':' and '\0').  While at it, we also
check whether malloc(3) succeeded.
This commit is contained in:
Holger Weiss 2013-08-21 15:00:27 +02:00
parent ae8ff32eac
commit 461cea4261

View file

@ -150,16 +150,18 @@ static char *fix_snmp_range(char *th)
{
double left, right;
char *colon, *ret;
if (!(colon = strchr(th, ':')))
if ((colon = strchr(th, ':')) == NULL || *(colon + 1) == '\0')
return th;
*colon = 0;
left = strtod(th, NULL);
right = strtod(colon + 1, NULL);
if (right >= left) {
if (right >= left)
return th;
}
ret = malloc(strlen(th) + strlen(colon + 1) + 2);
if ((ret = malloc(strlen(th) + 2)) == NULL)
die(STATE_UNKNOWN, _("Cannot malloc"));
*colon = '\0';
sprintf(ret, "@%s:%s", colon + 1, th);
free(th);
return ret;