[git commit] ash: allow popredir to be called if the stack is empty

Denys Vlasenko vda.linux at googlemail.com
Fri Oct 30 21:23:13 UTC 2015


commit: http://git.busybox.net/busybox/commit/?id=95650a86d176ee83a264fd9e7047c414b71ee7cb
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

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 at bluebottle.com>
Signed-off-by: Ron Yorston <rmy at pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/ash.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/shell/ash.c b/shell/ash.c
index c333b23..8450263 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -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;


More information about the busybox-cvs mailing list