diff --git a/shell/hush.c b/shell/hush.c index 2ad8ebacb..292b8b2e3 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -5328,9 +5328,12 @@ static int parse_stream_dquoted(o_string *as_string, * within double quotes by preceding it with a backslash. */ if (strchr("$`\"\\", next) != NULL) { - o_addqchr(dest, i_getch(input)); + ch = i_getch(input); + o_addqchr(dest, ch); + nommu_addchr(as_string, ch); } else { o_addqchr(dest, '\\'); + nommu_addchr(as_string, '\\'); } goto again; } diff --git a/shell/hush_test/hush-misc/func4.right b/shell/hush_test/hush-misc/func4.right new file mode 100644 index 000000000..0c87e316a --- /dev/null +++ b/shell/hush_test/hush-misc/func4.right @@ -0,0 +1,2 @@ +24 +Done diff --git a/shell/hush_test/hush-misc/func4.tests b/shell/hush_test/hush-misc/func4.tests new file mode 100755 index 000000000..db3f15abf --- /dev/null +++ b/shell/hush_test/hush-misc/func4.tests @@ -0,0 +1,7 @@ +func() { + eval "echo \"\${val_${1}}\"" +} + +val_x=24 +(func x) +echo Done diff --git a/shell/hush_test/hush-z_slow/leak_all1.tests b/shell/hush_test/hush-z_slow/leak_all1.tests index 17ce0c6fa..4e3c4fdec 100755 --- a/shell/hush_test/hush-z_slow/leak_all1.tests +++ b/shell/hush_test/hush-z_slow/leak_all1.tests @@ -67,6 +67,7 @@ HERE f >/dev/null : $((i++)) done +unset i l t unset -f f memleak @@ -134,6 +135,7 @@ HERE f >/dev/null : $((i++)) done +unset i l t unset -f f