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

Reply via email to