On Sun, Mar 13, 2011 at 01:48:58PM -0500, Jonathan Nieder wrote: > Here's another bug bisecting to f42e443bb ([EXPAND] Fix > ifsfirst/ifslastp leak, 2010-09-08). It was found with the following > test case, based on the configure script for Tracker: > > dash -x -c ' > <<-_ACEOF > $@ > _ACEOF > exec > ' - abcdefgh > + > + exec ïa > exec: 1: : Permission denied > > The missing ifsfree call is in expandarg when it returns to openhere > during here document expansion. > > Reported-by: Aurelien Jarno <aurel32@xxxxxxxxxx> > Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> Applied with minor rearrangement. Thanks! -- Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt -- commit a58d301405d96fb8ff87cffa3cabe3b110214a31 Author: Jonathan Nieder <jrnieder@xxxxxxxxx> Date: Tue Mar 15 16:01:34 2011 +0800 [EXPAND] Free IFS state after here document expansion Here's another bug bisecting to f42e443bb ([EXPAND] Fix ifsfirst/ifslastp leak, 2010-09-08). It was found with the following test case, based on the configure script for Tracker: dash -x -c ' <<-_ACEOF $@ _ACEOF exec ' - abcdefgh + + exec ïa exec: 1: : Permission denied The missing ifsfree call is in expandarg when it returns to openhere during here document expansion. Reported-by: Aurelien Jarno <aurel32@xxxxxxxxxx> Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> diff --git a/ChangeLog b/ChangeLog index 44e5bdf..5163479 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2011-03-15 Jonathan Nieder <jrnieder@xxxxxxxxx> + + * Free IFS state after here document expansion. + 2011-03-15 Harald van Dijk <harald@xxxxxxxxxxx> * Let funcnode refer to a function definition, not its first command. diff --git a/src/expand.c b/src/expand.c index f155ea0..ce60fe9 100644 --- a/src/expand.c +++ b/src/expand.c @@ -194,7 +194,8 @@ expandarg(union node *arg, struct arglist *arglist, int flag) p = _STPUTC('\0', expdest); expdest = p - 1; if (arglist == NULL) { - return; /* here document expanded */ + /* here document expanded */ + goto out; } p = grabstackstr(p); exparg.lastp = &exparg.list; @@ -212,12 +213,14 @@ expandarg(union node *arg, struct arglist *arglist, int flag) *exparg.lastp = sp; exparg.lastp = &sp->next; } - ifsfree(); *exparg.lastp = NULL; if (exparg.list) { *arglist->lastp = exparg.list; arglist->lastp = exparg.lastp; } + +out: + ifsfree(); } -- To unsubscribe from this list: send the line "unsubscribe dash" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html