hush/shell/hush_test/hush-z_slow/leak_all1.tests
Denys Vlasenko acdc49c073 hush: add more complex case to leak testcase, fix found breakage
function                                             old     new   delta
unset_local_var_len                                    -     167    +167
run_list                                            2350    2457    +107
set_vars_and_save_old                                  -      87     +87
free_pipe                                            207     227     +20
builtin_unset                                        220     229      +9
builtin_exit                                          49      47      -2
free_strings_and_unset                                53       -     -53
set_vars_all_and_save_old                             87       -     -87
unset_local_var                                      168       -    -168
------------------------------------------------------------------------------
(add/remove: 2/3 grow/shrink: 3/1 up/down: 390/-310)           Total: 80 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2009-05-04 01:58:10 +02:00

149 lines
3.8 KiB
Plaintext
Executable File

# "Check many leaks" test #1
# Cramming all kinds of weird commands in here.
# As you find leaks, please create separate, small test
# for each leak.
# Narrowing down the leak using this large test may be difficult.
# It is intended to be a blanket "is everything ok?" test
echo "Warm up"
i=1
l=1
t=1
export t
while test $i != 99; do
t=value1_$i; t=value2_$i true; t=value3_$i /bin/true; t=value4_$i exec 1>&1
{ t=value3_$i /bin/true; } </dev/null
if true; t=valueA_$i false >>/dev/null; true; then
: << HERE >/dev/null; true <<HERE
Hello builtin :
HERE
Hello $i true
HERE
elif false; then
true; echo Doesnt run
else
{ true; }; echo Doesnt run too >>/foo/bar
fi
{ : /bin/*; }
unset var
echo >/dev/null ${var#}
echo >/dev/null ${var##}
echo >/dev/null ${var#*}
echo >/dev/null ${var##*}
echo >/dev/null ${var%}
echo >/dev/null ${var%%}
echo >/dev/null ${var%*}
echo >/dev/null ${var%%*}
var=
echo >/dev/null ${var#}
echo >/dev/null ${var##}
echo >/dev/null ${var#*}
echo >/dev/null ${var##*}
echo >/dev/null ${var%}
echo >/dev/null ${var%%}
echo >/dev/null ${var%*}
echo >/dev/null ${var%%*}
var=ababcdcd
echo >/dev/null ${var#ab}
echo >/dev/null ${var##ab}
echo >/dev/null ${var#a*b}
echo >/dev/null ${var##a*b}
echo >/dev/null ${var#?}
echo >/dev/null ${var##?}
echo >/dev/null ${var#*}
echo >/dev/null ${var##*}
echo >/dev/null ${var%cd}
echo >/dev/null ${var%%cd}
echo >/dev/null ${var%c*d}
echo >/dev/null ${var%%c*d}
echo >/dev/null ${var%?}
echo >/dev/null ${var%%?}
echo >/dev/null ${var%*}
echo >/dev/null ${var%%*}
set -- par1_$i par2_$i par3_$i par4_$i
trap "echo trap$i" WINCH
f() { true; true; true; true; true; true; true; true; }
f() { true; true; true; true; true; true; true; true; echo $1; }
i=iii$i t=ttt$i z=zzz$i f >/dev/null
: $((i++))
done
unset i l t
unset -f f
memleak
echo "Measuring memory leak..."
# Please copy the entire block from above verbatim
i=1
l=1
t=1
export t
while test $i != 99; do
t=value1_$i; t=value2_$i true; t=value3_$i /bin/true; t=value4_$i exec 1>&1
{ t=value3_$i /bin/true; } </dev/null
if true; t=valueA_$i false >>/dev/null; true; then
: << HERE >/dev/null; true <<HERE
Hello builtin :
HERE
Hello $i true
HERE
elif false; then
true; echo Doesnt run
else
{ true; }; echo Doesnt run too >>/foo/bar
fi
{ : /bin/*; }
unset var
echo >/dev/null ${var#}
echo >/dev/null ${var##}
echo >/dev/null ${var#*}
echo >/dev/null ${var##*}
echo >/dev/null ${var%}
echo >/dev/null ${var%%}
echo >/dev/null ${var%*}
echo >/dev/null ${var%%*}
var=
echo >/dev/null ${var#}
echo >/dev/null ${var##}
echo >/dev/null ${var#*}
echo >/dev/null ${var##*}
echo >/dev/null ${var%}
echo >/dev/null ${var%%}
echo >/dev/null ${var%*}
echo >/dev/null ${var%%*}
var=ababcdcd
echo >/dev/null ${var#ab}
echo >/dev/null ${var##ab}
echo >/dev/null ${var#a*b}
echo >/dev/null ${var##a*b}
echo >/dev/null ${var#?}
echo >/dev/null ${var##?}
echo >/dev/null ${var#*}
echo >/dev/null ${var##*}
echo >/dev/null ${var%cd}
echo >/dev/null ${var%%cd}
echo >/dev/null ${var%c*d}
echo >/dev/null ${var%%c*d}
echo >/dev/null ${var%?}
echo >/dev/null ${var%%?}
echo >/dev/null ${var%*}
echo >/dev/null ${var%%*}
set -- par1_$i par2_$i par3_$i par4_$i
trap "echo trap$i" WINCH
f() { true; true; true; true; true; true; true; true; }
f() { true; true; true; true; true; true; true; true; echo $1; }
i=iii$i t=ttt$i z=zzz$i f >/dev/null
: $((i++))
done
unset i l t
unset -f f
memleak
kb=$?
if test $kb -le 4; then
echo Ok #$kb
else
echo "Bad: $kb kb leaked"
fi