diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-10-09 16:29:44 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-10-09 16:29:44 +0000 |
commit | afd7a8d744b29daaedbba1969307bd9ce17e7dc3 (patch) | |
tree | 015fa25e84f72a32b31724add0969f51a03bb74d /shell/hush_test | |
parent | 07e05c100fe6ac2bc5aa3505daabb55224c06a1f (diff) | |
download | busybox-w32-afd7a8d744b29daaedbba1969307bd9ce17e7dc3.tar.gz busybox-w32-afd7a8d744b29daaedbba1969307bd9ce17e7dc3.tar.bz2 busybox-w32-afd7a8d744b29daaedbba1969307bd9ce17e7dc3.zip |
hush: fix environment and memory leaks, add tests for them
function old new delta
add_malloced_string_to_strings - 110 +110
run_list 1999 2086 +87
free_strings_and_unsetenv - 87 +87
hush_version_str - 18 +18
pseudo_exec_argv 139 146 +7
static.version_str 17 - -17
free_pipe 237 210 -27
done_word 790 642 -148
------------------------------------------------------------------------------
(add/remove: 3/1 grow/shrink: 2/2 up/down: 309/-192) Total: 117 bytes
Diffstat (limited to 'shell/hush_test')
-rw-r--r-- | shell/hush_test/hush-vars/var_leaks.right | 1 | ||||
-rwxr-xr-x | shell/hush_test/hush-vars/var_leaks.tests | 14 | ||||
-rwxr-xr-x | shell/hush_test/hush-z_slow/leak_var.tests | 47 | ||||
-rw-r--r-- | shell/hush_test/hush-z_slow/leak_var2.right | 2 | ||||
-rwxr-xr-x | shell/hush_test/hush-z_slow/leak_var2.tests | 63 |
5 files changed, 127 insertions, 0 deletions
diff --git a/shell/hush_test/hush-vars/var_leaks.right b/shell/hush_test/hush-vars/var_leaks.right new file mode 100644 index 000000000..d86bac9de --- /dev/null +++ b/shell/hush_test/hush-vars/var_leaks.right | |||
@@ -0,0 +1 @@ | |||
OK | |||
diff --git a/shell/hush_test/hush-vars/var_leaks.tests b/shell/hush_test/hush-vars/var_leaks.tests new file mode 100755 index 000000000..27c8c6504 --- /dev/null +++ b/shell/hush_test/hush-vars/var_leaks.tests | |||
@@ -0,0 +1,14 @@ | |||
1 | # external program | ||
2 | a=b /bin/true | ||
3 | env | grep ^a= | ||
4 | |||
5 | # builtin | ||
6 | a=b true | ||
7 | env | grep ^a= | ||
8 | |||
9 | # exec with redirection only | ||
10 | # in bash, this leaks! | ||
11 | a=b exec 1>&1 | ||
12 | env | grep ^a= | ||
13 | |||
14 | echo OK | ||
diff --git a/shell/hush_test/hush-z_slow/leak_var.tests b/shell/hush_test/hush-z_slow/leak_var.tests index 388d6a734..b3e13e308 100755 --- a/shell/hush_test/hush-z_slow/leak_var.tests +++ b/shell/hush_test/hush-z_slow/leak_var.tests | |||
@@ -42,6 +42,53 @@ while test $i != X; do | |||
42 | done | 42 | done |
43 | end=`ps -o pid,vsz | grep "^ *$pid "` | 43 | end=`ps -o pid,vsz | grep "^ *$pid "` |
44 | 44 | ||
45 | # Warm up again (I do need it on my machine) | ||
46 | beg=`ps -o pid,vsz | grep "^ *$pid "` | ||
47 | i=1 | ||
48 | while test $i != X; do | ||
49 | unset t | ||
50 | t=111111111111111111111111111111111111111111111111111111111111111111111111 | ||
51 | export t | ||
52 | unset t | ||
53 | t=111111111111111111111111111111111111111111111111111111111111111111111111 | ||
54 | export t | ||
55 | unset t | ||
56 | t=111111111111111111111111111111111111111111111111111111111111111111111111 | ||
57 | export t | ||
58 | unset t | ||
59 | t=111111111111111111111111111111111111111111111111111111111111111111111111 | ||
60 | export t | ||
61 | unset t | ||
62 | t=111111111111111111111111111111111111111111111111111111111111111111111111 | ||
63 | export t | ||
64 | i=1$i | ||
65 | if test $i = 1111111111111111111111111111111111111111111111; then i=2; fi | ||
66 | if test $i = 1111111111111111111111111111111111111111111112; then i=3; fi | ||
67 | if test $i = 1111111111111111111111111111111111111111111113; then i=4; fi | ||
68 | if test $i = 1111111111111111111111111111111111111111111114; then i=5; fi | ||
69 | if test $i = 1111111111111111111111111111111111111111111115; then i=6; fi | ||
70 | if test $i = 1111111111111111111111111111111111111111111116; then i=7; fi | ||
71 | if test $i = 1111111111111111111111111111111111111111111117; then i=8; fi | ||
72 | if test $i = 1111111111111111111111111111111111111111111118; then i=9; fi | ||
73 | if test $i = 1111111111111111111111111111111111111111111119; then i=a; fi | ||
74 | if test $i = 111111111111111111111111111111111111111111111a; then i=b; fi | ||
75 | if test $i = 111111111111111111111111111111111111111111111b; then i=c; fi | ||
76 | if test $i = 111111111111111111111111111111111111111111111c; then i=d; fi | ||
77 | if test $i = 111111111111111111111111111111111111111111111d; then i=e; fi | ||
78 | if test $i = 111111111111111111111111111111111111111111111e; then i=f; fi | ||
79 | if test $i = 111111111111111111111111111111111111111111111f; then i=g; fi | ||
80 | if test $i = 111111111111111111111111111111111111111111111g; then i=h; fi | ||
81 | if test $i = 111111111111111111111111111111111111111111111h; then i=i; fi | ||
82 | if test $i = 111111111111111111111111111111111111111111111i; then i=j; fi | ||
83 | if test $i = 111111111111111111111111111111111111111111111j; then i=X; fi | ||
84 | done | ||
85 | end=`ps -o pid,vsz | grep "^ *$pid "` | ||
86 | if test "$beg" != "$end"; then | ||
87 | true echo "vsz grows: $beg -> $end" | ||
88 | else | ||
89 | true echo "vsz does not grow" | ||
90 | fi | ||
91 | |||
45 | echo "Measuring memory leak..." | 92 | echo "Measuring memory leak..." |
46 | beg=`ps -o pid,vsz | grep "^ *$pid "` | 93 | beg=`ps -o pid,vsz | grep "^ *$pid "` |
47 | i=1 | 94 | i=1 |
diff --git a/shell/hush_test/hush-z_slow/leak_var2.right b/shell/hush_test/hush-z_slow/leak_var2.right new file mode 100644 index 000000000..7bccc1eef --- /dev/null +++ b/shell/hush_test/hush-z_slow/leak_var2.right | |||
@@ -0,0 +1,2 @@ | |||
1 | Measuring memory leak... | ||
2 | vsz does not grow | ||
diff --git a/shell/hush_test/hush-z_slow/leak_var2.tests b/shell/hush_test/hush-z_slow/leak_var2.tests new file mode 100755 index 000000000..09f247552 --- /dev/null +++ b/shell/hush_test/hush-z_slow/leak_var2.tests | |||
@@ -0,0 +1,63 @@ | |||
1 | pid=$$ | ||
2 | |||
3 | t=1 | ||
4 | export t | ||
5 | |||
6 | # Warm up | ||
7 | beg=`ps -o pid,vsz | grep "^ *$pid "` | ||
8 | i=1 | ||
9 | while test $i != X; do | ||
10 | t=111111111111111111111111111111111111111111111111111111111111111111111110$i | ||
11 | t=111111111111111111111111111111111111111111111111111111111111111111111111$i true | ||
12 | t=111111111111111111111111111111111111111111111111111111111111111111111112$i /bin/true | ||
13 | t=111111111111111111111111111111111111111111111111111111111111111111111113$i exec 1>&1 | ||
14 | i=1$i | ||
15 | if test $i = 1111111111111111111111111111111111111111111111; then i=2; fi | ||
16 | if test $i = 1111111111111111111111111111111111111111111112; then i=3; fi | ||
17 | if test $i = 1111111111111111111111111111111111111111111113; then i=4; fi | ||
18 | if test $i = 1111111111111111111111111111111111111111111114; then i=X; fi | ||
19 | done | ||
20 | end=`ps -o pid,vsz | grep "^ *$pid "` | ||
21 | |||
22 | # Warm up again (I do need it on my machine) | ||
23 | beg=`ps -o pid,vsz | grep "^ *$pid "` | ||
24 | i=1 | ||
25 | while test $i != X; do | ||
26 | t=111111111111111111111111111111111111111111111111111111111111111111111110$i | ||
27 | t=111111111111111111111111111111111111111111111111111111111111111111111111$i true | ||
28 | t=111111111111111111111111111111111111111111111111111111111111111111111112$i /bin/true | ||
29 | t=111111111111111111111111111111111111111111111111111111111111111111111113$i exec 1>&1 | ||
30 | i=1$i | ||
31 | if test $i = 1111111111111111111111111111111111111111111111; then i=2; fi | ||
32 | if test $i = 1111111111111111111111111111111111111111111112; then i=3; fi | ||
33 | if test $i = 1111111111111111111111111111111111111111111113; then i=4; fi | ||
34 | if test $i = 1111111111111111111111111111111111111111111114; then i=X; fi | ||
35 | done | ||
36 | end=`ps -o pid,vsz | grep "^ *$pid "` | ||
37 | if test "$beg" != "$end"; then | ||
38 | true echo "vsz grows: $beg -> $end" | ||
39 | else | ||
40 | true echo "vsz does not grow" | ||
41 | fi | ||
42 | |||
43 | echo "Measuring memory leak..." | ||
44 | beg=`ps -o pid,vsz | grep "^ *$pid "` | ||
45 | i=1 | ||
46 | while test $i != X; do | ||
47 | t=111111111111111111111111111111111111111111111111111111111111111111111110$i | ||
48 | t=111111111111111111111111111111111111111111111111111111111111111111111111$i true | ||
49 | t=111111111111111111111111111111111111111111111111111111111111111111111112$i /bin/true | ||
50 | t=111111111111111111111111111111111111111111111111111111111111111111111113$i exec 1>&1 | ||
51 | i=1$i | ||
52 | if test $i = 1111111111111111111111111111111111111111111111; then i=2; fi | ||
53 | if test $i = 1111111111111111111111111111111111111111111112; then i=3; fi | ||
54 | if test $i = 1111111111111111111111111111111111111111111113; then i=4; fi | ||
55 | if test $i = 1111111111111111111111111111111111111111111114; then i=X; fi | ||
56 | done | ||
57 | end=`ps -o pid,vsz | grep "^ *$pid "` | ||
58 | |||
59 | if test "$beg" != "$end"; then | ||
60 | echo "vsz grows: $beg -> $end" | ||
61 | else | ||
62 | echo "vsz does not grow" | ||
63 | fi | ||