From: Denys Vlasenko Date: Mon, 9 Jan 2017 07:22:06 +0000 (+0100) Subject: ash: fix a bug in argv restoration after sourcing a file X-Git-Tag: 1_27_0~260 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=fb87d93d1e0a6760049fa88aadd1232b7e1545e7;p=oweals%2Fbusybox.git 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 --- 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) int status = 0; char *fullname; char **argv; + char *args_need_save; struct strlist *sp; volatile struct shparam saveparam; @@ -12567,7 +12568,8 @@ dotcmd(int argc_ UNUSED_PARAM, char **argv_ UNUSED_PARAM) */ fullname = find_dot_file(argv[0]); argv++; - if (argv[0]) { /* . FILE ARGS, ARGS exist */ + args_need_save = argv[0]; + if (args_need_save) { /* . FILE ARGS, ARGS exist */ int argc; saveparam = shellparam; shellparam.malloced = 0; @@ -12586,7 +12588,7 @@ dotcmd(int argc_ UNUSED_PARAM, char **argv_ UNUSED_PARAM) status = cmdloop(0); popfile(); - if (argv[0]) { + if (args_need_save) { freeparam(&shellparam); shellparam = saveparam; };