fix regression in jaredy’s security patch introduced in R35b

(cid 100487B467E068A55D6 and 10048949D196A7C1390) discovered
by Jb_boin: time with a not-TCOM subtree would now trash its
string argument (which is the loop variable for TFOR); amend
regression testsuite
This commit is contained in:
tg 2012-01-03 15:32:08 +00:00
parent 34036ec32e
commit 2539450588
2 changed files with 13 additions and 12 deletions

18
check.t
View File

@ -1,4 +1,4 @@
# $MirOS: src/bin/mksh/check.t,v 1.509 2012/01/03 01:40:15 tg Exp $
# $MirOS: src/bin/mksh/check.t,v 1.510 2012/01/03 15:32:05 tg Exp $
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
@ -8284,7 +8284,7 @@ stdin:
#TSELECT
select file in *; do echo "<$file>" ; break ; done
#TFOR_TTIME
for i in {1,2,3} ; do time echo $i ; done
time for i in {1,2,3} ; do echo $i ; done
#TCASE
case $foo in 1) echo eins;& 2) echo zwei ;| *) echo kann net bis drei zählen;; esac
#TIF_TBANG_TDBRACKET_TELIF
@ -8426,25 +8426,25 @@ expected-stdout:
x=$(( select file in * ; do echo "<$file>" ; break ; done ) | tr u x )
}
inline_TFOR_TTIME() {
for i in {1,2,3} ; do time echo $i ; done
time for i in {1,2,3} ; do echo $i ; done
}
inline_TFOR_TTIME() {
for i in {1,2,3}
time for i in {1,2,3}
do
time echo $i
echo $i
done
}
function comsub_TFOR_TTIME { x=$(
for i in {1,2,3} ; do time echo $i ; done
time for i in {1,2,3} ; do echo $i ; done
); }
function comsub_TFOR_TTIME {
x=$(for i in {1,2,3} ; do time echo $i ; done )
x=$(time for i in {1,2,3} ; do echo $i ; done )
}
function reread_TFOR_TTIME { x=$((
for i in {1,2,3} ; do time echo $i ; done
time for i in {1,2,3} ; do echo $i ; done
)|tr u x); }
function reread_TFOR_TTIME {
x=$(( for i in {1,2,3} ; do time echo $i ; done ) | tr u x )
x=$(( time for i in {1,2,3} ; do echo $i ; done ) | tr u x )
}
inline_TCASE() {
case $foo in 1) echo eins;& 2) echo zwei ;| *) echo kann net bis drei zählen;; esac

7
syn.c
View File

@ -1,7 +1,8 @@
/* $OpenBSD: syn.c,v 1.28 2008/07/23 16:34:38 jaredy Exp $ */
/*-
* Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011
* Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009,
* 2011, 2012
* Thorsten Glaser <tg@mirbsd.org>
*
* Provided that these terms and disclaimer and all copyright notices
@ -22,7 +23,7 @@
#include "sh.h"
__RCSID("$MirOS: src/bin/mksh/syn.c,v 1.72 2011/12/29 22:03:15 tg Exp $");
__RCSID("$MirOS: src/bin/mksh/syn.c,v 1.73 2012/01/03 15:32:08 tg Exp $");
extern short subshell_nesting_level;
extern void yyskiputf8bom(void);
@ -458,7 +459,7 @@ get_command(int cf)
case TIME:
syniocf &= ~(KEYWORD|sALIAS);
t = pipeline(0);
if (t) {
if (t && t->type == TCOM) {
t->str = alloc(2, ATEMP);
/* TF_* flags */
t->str[0] = '\0';