ash: allow popredir to be called if the stack is empty
authorRon Yorston <rmy@pobox.com>
Fri, 30 Oct 2015 19:07:37 +0000 (19:07 +0000)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 30 Oct 2015 21:23:13 +0000 (22:23 +0100)
If /tmp/test.sh is a script that tries to run a second script which
happens to be non-executable this:

   command . /tmp/test.sh

causes a seg fault.

This is because clearredir is called in the error path to clear the
stack of redirections.  The normal path then calls popredir, but popredir
fails when the stack is empty.

Reported-by: Bastian Bittorf <bittorf@bluebottle.com>
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c

index c333b235bba5ec7f0ee9391d48ac0a45478f6e5f..84502636a5155e7bc10b6893072137f8bafd042c 100644 (file)
@@ -5409,7 +5409,7 @@ popredir(int drop, int restore)
        struct redirtab *rp;
        int i;
 
-       if (--g_nullredirs >= 0)
+       if (--g_nullredirs >= 0 || redirlist == NULL)
                return;
        INT_OFF;
        rp = redirlist;