ash: fix a bug in argv restoration after sourcing a file
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 9 Jan 2017 07:22:06 +0000 (08:22 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 9 Jan 2017 07:22:06 +0000 (08:22 +0100)
if sourced file "shift"ed argvs so that $1 is NULL, restore wasn't done.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c

index efb4615db10cbf31ff80371089b5277776535411..9c46a93e0d4e5303e34fb72a98ff0b83f4365577 100644 (file)
@@ -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;
        };