aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2008-09-29 02:06:58 -0700
committerEric Wong <normalperson@yhbt.net>2008-09-29 02:06:58 -0700
commit769939b62f7557f8e7c483223d68a8b39af43e37 (patch)
tree8fc8ca9751756cff80ff246bd6a8cb6477e56e5c
parentd645f0a97a52ac061d1f6a43b798c05df93fc48e (diff)
downloadmpd-769939b62f7557f8e7c483223d68a8b39af43e37.tar.gz
mpd-769939b62f7557f8e7c483223d68a8b39af43e37.tar.xz
mpd-769939b62f7557f8e7c483223d68a8b39af43e37.zip
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.
-rw-r--r--src/command.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/command.c b/src/command.c
index 616132bea..3d4e2ccd5 100644
--- a/src/command.c
+++ b/src/command.c
@@ -1387,16 +1387,19 @@ static CommandEntry *getCommandEntryAndCheckArgcAndPermission(int fd,
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;
}