From c134205981203c7a6908f5ae1e3ca297bac83876 Mon Sep 17 00:00:00 2001
From: Matthias Eble <psychotrahe@users.sourceforge.net>
Date: Sat, 14 Jul 2007 19:36:48 +0000
Subject: Fixed segfault in argument processing. Thanks to Christoph Schell
 (#1742066)

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1757 f882894a-f735-0410-b71e-b25c423dba1c

diff --git a/THANKS.in b/THANKS.in
index abe1ce4..c788bac 100644
--- a/THANKS.in
+++ b/THANKS.in
@@ -221,3 +221,4 @@ Emil Michles
 Ask Bjoern Hansen
 Daniel Bimschas
 Aurelien Bompard
+Christoph Schell
diff --git a/plugins/check_smtp.c b/plugins/check_smtp.c
index 5001b50..a7a0783 100644
--- a/plugins/check_smtp.c
+++ b/plugins/check_smtp.c
@@ -582,22 +582,26 @@ process_arguments (int argc, char **argv)
 			break;
 		case 'C':									/* commands  */
 			if (ncommands >= command_size) {
-				commands = realloc (commands, command_size+8);
+				command_size+=8;
+				commands = realloc (commands, sizeof(char *) * command_size);
 				if (commands == NULL)
 					die (STATE_UNKNOWN,
 					     _("Could not realloc() units [%d]\n"), ncommands);
 			}
-			commands[ncommands] = optarg;
+			commands[ncommands] = (char *) malloc (sizeof(char) * 255);
+			strncpy (commands[ncommands], optarg, 255);
 			ncommands++;
 			break;
 		case 'R':									/* server responses */
 			if (nresponses >= response_size) {
-				responses = realloc (responses, response_size+8);
+				response_size += 8;
+				responses = realloc (responses, sizeof(char *) * response_size);
 				if (responses == NULL)
 					die (STATE_UNKNOWN,
 					     _("Could not realloc() units [%d]\n"), nresponses);
 			}
-			responses[nresponses] = optarg;
+			responses[nresponses] = (char *) malloc (sizeof(char) * 255);
+			strncpy (responses[nresponses], optarg, 255);
 			nresponses++;
 			break;
 		case 'c':									/* critical time threshold */
-- 
cgit v0.10-9-g596f

