diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-01-09 08:22:06 +0100 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-01-09 08:22:06 +0100 |
| commit | fb87d93d1e0a6760049fa88aadd1232b7e1545e7 (patch) | |
| tree | 775402433f86553d91e78d0ef8ee9f0b0bee0bed /shell | |
| parent | 2b1559056cf32c42675ecd937796e1455bcb5c2c (diff) | |
| download | busybox-w32-fb87d93d1e0a6760049fa88aadd1232b7e1545e7.tar.gz busybox-w32-fb87d93d1e0a6760049fa88aadd1232b7e1545e7.tar.bz2 busybox-w32-fb87d93d1e0a6760049fa88aadd1232b7e1545e7.zip | |
ash: fix a bug in argv restoration after sourcing a file
if sourced file "shift"ed argvs so that $1 is NULL, restore wasn't done.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
| -rw-r--r-- | shell/ash.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/shell/ash.c b/shell/ash.c index efb4615db..9c46a93e0 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
| @@ -12548,6 +12548,7 @@ dotcmd(int argc_ UNUSED_PARAM, char **argv_ UNUSED_PARAM) | |||
| 12548 | int status = 0; | 12548 | int status = 0; |
| 12549 | char *fullname; | 12549 | char *fullname; |
| 12550 | char **argv; | 12550 | char **argv; |
| 12551 | char *args_need_save; | ||
| 12551 | struct strlist *sp; | 12552 | struct strlist *sp; |
| 12552 | volatile struct shparam saveparam; | 12553 | volatile struct shparam saveparam; |
| 12553 | 12554 | ||
| @@ -12567,7 +12568,8 @@ dotcmd(int argc_ UNUSED_PARAM, char **argv_ UNUSED_PARAM) | |||
| 12567 | */ | 12568 | */ |
| 12568 | fullname = find_dot_file(argv[0]); | 12569 | fullname = find_dot_file(argv[0]); |
| 12569 | argv++; | 12570 | argv++; |
| 12570 | if (argv[0]) { /* . FILE ARGS, ARGS exist */ | 12571 | args_need_save = argv[0]; |
| 12572 | if (args_need_save) { /* . FILE ARGS, ARGS exist */ | ||
| 12571 | int argc; | 12573 | int argc; |
| 12572 | saveparam = shellparam; | 12574 | saveparam = shellparam; |
| 12573 | shellparam.malloced = 0; | 12575 | shellparam.malloced = 0; |
| @@ -12586,7 +12588,7 @@ dotcmd(int argc_ UNUSED_PARAM, char **argv_ UNUSED_PARAM) | |||
| 12586 | status = cmdloop(0); | 12588 | status = cmdloop(0); |
| 12587 | popfile(); | 12589 | popfile(); |
| 12588 | 12590 | ||
| 12589 | if (argv[0]) { | 12591 | if (args_need_save) { |
| 12590 | freeparam(&shellparam); | 12592 | freeparam(&shellparam); |
| 12591 | shellparam = saveparam; | 12593 | shellparam = saveparam; |
| 12592 | }; | 12594 | }; |
