From 5f0ed72c489fd1f0b3c38e3608d27966e1f41f88 Mon Sep 17 00:00:00 2001
From: Eric Wong <normalperson@yhbt.net>
Date: Mon, 29 Sep 2008 13:18:35 +0200
Subject: command: don't clobber next list value when preparsing

This only breaks "update" under list command mode and
no other commands.  This can be done more optimally
without the extra heap allocation via xstrdup(); but is
uncommon enough to not matter.
---
 src/command.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

(limited to 'src')

diff --git a/src/command.c b/src/command.c
index 6ebcb977c..882d968d3 100644
--- a/src/command.c
+++ b/src/command.c
@@ -1422,16 +1422,19 @@ static CommandEntry *getCommandEntryAndCheckArgcAndPermission(struct client *cli
 
 static CommandEntry *getCommandEntryFromString(char *string, int permission)
 {
-	CommandEntry *cmd;
+	CommandEntry *cmd = NULL;
 	char *argv[COMMAND_ARGV_MAX] = { NULL };
-	int argc = buffer2array(string, argv, COMMAND_ARGV_MAX);
+	char *duplicated = xstrdup(string);
+	int argc = buffer2array(duplicated, argv, COMMAND_ARGV_MAX);
 
 	if (0 == argc)
-		return NULL;
+		goto out;
 
 	cmd = getCommandEntryAndCheckArgcAndPermission(0, permission,
 						       argc, argv);
 
+out:
+	free(duplicated);
 	return cmd;
 }
 
-- 
cgit v1.2.3