hush: plug the leak of expanded heredoc

diff --git a/shell/hush.c b/shell/hush.c
index d791b62..4c2716d 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -64,7 +64,6 @@
  *
  * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
  */
-
 #include "busybox.h" /* for APPLET_IS_NOFORK/NOEXEC */
 //TODO: pull in some .h and find out whether we have SINGLE_APPLET_MAIN?
 //#include "applet_tables.h" doesn't work
@@ -79,6 +78,12 @@
 # define PIPE_BUF 4096           /* amount of buffering in a pipe */
 #endif
 
+
+/* Debug build knobs */
+//#define LEAK_HUNTING 1
+//#define WANT_TO_TEST_NOMMU 1
+
+
 #ifdef WANT_TO_TEST_NOMMU
 # undef BB_MMU
 # undef USE_FOR_NOMMU
@@ -214,8 +219,7 @@
 /*
  * Leak hunting. Use hush_leaktool.sh for post-processing.
  */
-//#define FOR_HUSH_LEAKTOOL
-#ifdef FOR_HUSH_LEAKTOOL
+#ifdef LEAK_HUNTING
 static void *xxmalloc(int lineno, size_t size)
 {
 	void *ptr = xmalloc((size + 0xff) & ~0xff);
@@ -743,7 +747,7 @@
 		v[count1 + i] = (need_to_dup ? xstrdup(add[i]) : add[i]);
 	return v;
 }
-#ifdef FOR_HUSH_LEAKTOOL
+#ifdef LEAK_HUNTING
 static char **xx_add_strings_to_strings(int lineno, char **strings, char **add, int need_to_dup)
 {
 	char **ptr = add_strings_to_strings(strings, add, need_to_dup);
@@ -761,7 +765,7 @@
 	v[1] = NULL;
 	return add_strings_to_strings(strings, v, /*dup:*/ 0);
 }
-#ifdef FOR_HUSH_LEAKTOOL
+#ifdef LEAK_HUNTING
 static char **xx_add_string_to_strings(int lineno, char **strings, char *add)
 {
 	char **ptr = add_string_to_strings(strings, add);
@@ -2310,6 +2314,7 @@
 		len -= written;
 		if (len == 0) {
 			close(pair.wr);
+			free(expanded);
 			return;
 		}
 		heredoc += written;