Update of /cvsroot/tmux/tmux
In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv8783
Modified Files:
cmd-list.c cmd.c tmux.h
Log Message:
|---------------------
|PatchSet 781
|Date: 2010/10/29 21:11:57
|Author: nicm
|Branch: HEAD
|Tag: (none)
|Log:
|We now send argv to the server after parsing it in the client to get the
|command, so the client should not modify it. Instead, take a copy. Fixes
|parsing command lists, reported by mcbr...@.
|
|Members:
| cmd-list.c:1.5->1.6
| cmd.c:1.45->1.46
| tmux.h:1.244->1.245
Index: cmd-list.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-list.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- cmd-list.c 2 Jul 2010 02:43:01 -0000 1.9
+++ cmd-list.c 6 Dec 2010 21:48:56 -0000 1.10
@@ -29,7 +29,9 @@
struct cmd *cmd;
int i, lastsplit;
size_t arglen, new_argc;
- char **new_argv;
+ char **copy_argv, **new_argv;
+
+ copy_argv = cmd_copy_argv(argc, argv);
cmdlist = xmalloc(sizeof *cmdlist);
cmdlist->references = 1;
@@ -37,18 +39,18 @@
lastsplit = 0;
for (i = 0; i < argc; i++) {
- arglen = strlen(argv[i]);
- if (arglen == 0 || argv[i][arglen - 1] != ';')
+ arglen = strlen(copy_argv[i]);
+ if (arglen == 0 || copy_argv[i][arglen - 1] != ';')
continue;
- argv[i][arglen - 1] = '\0';
+ copy_argv[i][arglen - 1] = '\0';
- if (arglen > 1 && argv[i][arglen - 2] == '\\') {
- argv[i][arglen - 2] = ';';
+ if (arglen > 1 && copy_argv[i][arglen - 2] == '\\') {
+ copy_argv[i][arglen - 2] = ';';
continue;
}
new_argc = i - lastsplit;
- new_argv = argv + lastsplit;
+ new_argv = copy_argv + lastsplit;
if (arglen != 1)
new_argc++;
@@ -61,16 +63,18 @@
}
if (lastsplit != argc) {
- cmd = cmd_parse(argc - lastsplit, argv + lastsplit, cause);
+ cmd = cmd_parse(argc - lastsplit, copy_argv + lastsplit, cause);
if (cmd == NULL)
goto bad;
TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry);
}
+ cmd_free_argv(argc, copy_argv);
return (cmdlist);
bad:
cmd_list_free(cmdlist);
+ cmd_free_argv(argc, copy_argv);
return (NULL);
}
Index: cmd.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd.c,v
retrieving revision 1.144
retrieving revision 1.145
diff -u -d -r1.144 -r1.145
--- cmd.c 24 Oct 2010 01:34:30 -0000 1.144
+++ cmd.c 6 Dec 2010 21:48:56 -0000 1.145
@@ -165,6 +165,22 @@
return (0);
}
+char **
+cmd_copy_argv(int argc, char **argv)
+{
+ char **new_argv;
+ int i;
+
+ if (argc == 0)
+ return (NULL);
+ new_argv = xcalloc(argc, sizeof *new_argv);
+ for (i = 0; i < argc; i++) {
+ if (argv[i] != NULL)
+ new_argv[i] = xstrdup(argv[i]);
+ }
+ return (new_argv);
+}
+
void
cmd_free_argv(int argc, char **argv)
{
Index: tmux.h
===================================================================
RCS file: /cvsroot/tmux/tmux/tmux.h,v
retrieving revision 1.581
retrieving revision 1.582
diff -u -d -r1.581 -r1.582
--- tmux.h 24 Oct 2010 01:34:30 -0000 1.581
+++ tmux.h 6 Dec 2010 21:48:56 -0000 1.582
@@ -1462,6 +1462,7 @@
/* cmd.c */
int cmd_pack_argv(int, char **, char *, size_t);
int cmd_unpack_argv(char *, size_t, int, char ***);
+char **cmd_copy_argv(int, char **);
void cmd_free_argv(int, char **);
struct cmd *cmd_parse(int, char **, char **);
int cmd_exec(struct cmd *, struct cmd_ctx *);
------------------------------------------------------------------------------
What happens now with your Lotus Notes apps - do you make another costly
upgrade, or settle for being marooned without product support? Time to move
off Lotus Notes and onto the cloud with Force.com, apps are easier to build,
use, and manage than apps on traditional platforms. Sign up for the Lotus
Notes Migration Kit to learn more. http://p.sf.net/sfu/salesforce-d2d
_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs