diff options
author | Tiago Cunha <tcunha@gmx.com> | 2009-11-13 16:55:10 +0000 |
---|---|---|
committer | Tiago Cunha <tcunha@gmx.com> | 2009-11-13 16:55:10 +0000 |
commit | ba832ff2c39f581543167cb6050cd003de31fee0 (patch) | |
tree | ba150ee936f34f733a48b81642e971f56b2e51aa | |
parent | 2ec5aca064f297e97c2d0bd9d8a481d157f83ebe (diff) | |
download | rtmux-ba832ff2c39f581543167cb6050cd003de31fee0.tar.gz rtmux-ba832ff2c39f581543167cb6050cd003de31fee0.tar.bz2 rtmux-ba832ff2c39f581543167cb6050cd003de31fee0.zip |
Sync OpenBSD patchset 530:
Rewrite a confusing loop when freeing the arg array on exit and move the check
for argv being NULL, prompted by parfait via deraadt.
Also fix some definite brokenness when assigning multiple environment variables
in arguments (such as "X=1 Y=2").
-rw-r--r-- | cmd-string.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/cmd-string.c b/cmd-string.c index 13fb6c76..69cc9b6e 100644 --- a/cmd-string.c +++ b/cmd-string.c @@ -1,4 +1,4 @@ -/* $Id: cmd-string.c,v 1.24 2009-10-28 23:12:38 tcunha Exp $ */ +/* $Id: cmd-string.c,v 1.25 2009-11-13 16:55:10 tcunha Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net> @@ -134,17 +134,15 @@ cmd_string_parse(const char *s, struct cmd_list **cmdlist, char **cause) if (ch != EOF) break; - if (argc == 0) - goto out; - for (i = 0; i < argc; i++) { - equals = strchr(argv[i], '='); - whitespace = argv[i] + strcspn(argv[i], " \t"); + while (argc != 0) { + equals = strchr(argv[0], '='); + whitespace = argv[0] + strcspn(argv[0], " \t"); if (equals == NULL || equals > whitespace) break; - environ_put(&global_environ, argv[i]); - memmove(&argv[i], &argv[i + 1], argc - i - 1); + environ_put(&global_environ, argv[0]); argc--; + memmove(argv, argv + 1, argc * (sizeof *argv)); } if (argc == 0) goto out; @@ -189,10 +187,11 @@ out: if (buf != NULL) xfree(buf); - while (--argc >= 0) - xfree(argv[argc]); - if (argv != NULL) + if (argv != NULL) { + for (i = 0; i < argc; i++) + xfree(argv[argc]); xfree(argv); + } return (rval); } |