From c874f950e8e5b6a805d8adf759d521501b22c7ce Mon Sep 17 00:00:00 2001
From: Sven Nierlein <Sven.Nierlein@consol.de>
Date: Wed, 15 Mar 2023 09:51:18 +0100
Subject: [PATCH 1/2] check_snmp: disable multiplier when unused

 - if no multiplier is set, simply return the given string. Otherwise we would strip off the unit.
 - if used, allocate new space to hold the result which might be larger than the initial input

Signed-off-by: Sven Nierlein <sven@consol.de>
---
 plugins/check_snmp.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c
index d3968a27d..c4ddd0edd 100644
--- a/plugins/check_snmp.c
+++ b/plugins/check_snmp.c
@@ -46,6 +46,7 @@ const char *email = "devel@monitoring-plugins.org";
 #define DEFAULT_PRIV_PROTOCOL "DES"
 #define DEFAULT_DELIMITER "="
 #define DEFAULT_OUTPUT_DELIMITER " "
+#define DEFAULT_BUFFER_SIZE 100
 
 #define mark(a) ((a)!=0?"*":"")
 
@@ -157,6 +158,7 @@ int perf_labels = 1;
 char* ip_version = "";
 double multiplier = 1.0;
 char *fmtstr = "";
+char buffer[DEFAULT_BUFFER_SIZE];
 
 static char *fix_snmp_range(char *th)
 {
@@ -1169,6 +1171,9 @@ multiply (char *str)
 	double val;
 	char *conv = "%f";
 
+	if(multiplier == 1)
+		return(str);
+
 	if(verbose>2)
 		printf("    multiply input: %s\n", str);
 
@@ -1187,15 +1192,15 @@ multiply (char *str)
 		conv = fmtstr;
 	}
 	if (val == (int)val) {
-		sprintf(str, "%.0f", val);
+		snprintf(buffer, DEFAULT_BUFFER_SIZE, "%.0f", val);
 	} else {
 		if(verbose>2)
 			printf("    multiply using format: %s\n", conv);
-		sprintf(str, conv, val);
+		snprintf(buffer, DEFAULT_BUFFER_SIZE, conv, val);
 	}
 	if(verbose>2)
-		printf("    multiply result: %s\n", str);
-	return str;
+		printf("    multiply result: %s\n", buffer);
+	return buffer;
 }
 
 

From 6e64973a4486248ff6c3de7d72637e44b6474c3e Mon Sep 17 00:00:00 2001
From: Sven Nierlein <sven@consol.de>
Date: Mon, 27 Mar 2023 12:59:53 +0200
Subject: [PATCH 2/2] simplify code

if statement is always true at this point, so remove it.
---
 plugins/check_snmp.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c
index c4ddd0edd..aefda3d29 100644
--- a/plugins/check_snmp.c
+++ b/plugins/check_snmp.c
@@ -1179,10 +1179,7 @@ multiply (char *str)
 
 	val = strtod (str, &endptr);
 	if ((val == 0.0) && (endptr == str)) {
-		if(multiplier != 1) {
-			die(STATE_UNKNOWN, _("multiplier set (%.1f), but input is not a number: %s"), multiplier, str);
-		}
-		return str;
+		die(STATE_UNKNOWN, _("multiplier set (%.1f), but input is not a number: %s"), multiplier, str);
 	}
 
 	if(verbose>2)
