From 461cea42615936f0fdf9c75fa72d0fc0a88eaff6 Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Wed, 21 Aug 2013 15:00:27 +0200 Subject: check_snmp: Fix support for inverse thresholds Commit bd782990566eec91b8312cfc2765a7e2bd9e67da 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. diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c index 7c3bc4b..d2f2f8b 100644 --- a/plugins/check_snmp.c +++ b/plugins/check_snmp.c @@ -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; -- cgit v0.10-9-g596f