Hello,

There is a bug in sh_eval() function that may cause ksh to crash due to double 
free() after sourcing multiple files. I am providing a patch to fix this bug.

Steps to reproduce :

> cat functions.ksh 
#!/bin/ksh

function f1
{
echo "f1"
}

function f2
{
 if [[ $1 -eq 1 ]]: then
    echo "f2"
 fi
}

function f3
{

[[ 1 = 1 ]] && set -x

}

> cat sub1.ksh 
#!/bin/ksh

. ./functions.ksh

echo "sub1" > ./tmp.out

> cat main.ksh 
#!/bin/ksh
. ./sub1.ksh

> ksh main.ksh 
main.ksh[2]: .[3]: .: syntax error at line 10: `]]:' unexpected
Segmentation fault (core dumped)


-- 
--
Siteshwar Vashisht
diff --git a/src/cmd/ksh93/sh/xec.c b/src/cmd/ksh93/sh/xec.c
index 1ba7347..ab745d4 100644
--- a/src/cmd/ksh93/sh/xec.c
+++ b/src/cmd/ksh93/sh/xec.c
@@ -640,7 +640,11 @@ int sh_eval(register Sfio_t *iop, int mode)
 	if(lineno)
 		shp->inlineno = lineno;
 	if(io_save)
+	{
 		sfclose(io_save);
+		io_save = 0;
+	}
+
 	sh_freeup(shp);
 	shp->st.staklist = saveslp;
 	shp->fn_reset = 0;
-- 
2.9.3

_______________________________________________
ast-developers mailing list
ast-developers@lists.research.att.com
http://lists.research.att.com/mailman/listinfo/ast-developers

Reply via email to