mirror of
https://github.com/tmate-io/tmate.git
synced 2026-07-28 21:30:03 +00:00
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").
This commit is contained in:
parent
2ec5aca064
commit
ba832ff2c3
1 changed files with 10 additions and 11 deletions
21
cmd-string.c
21
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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue