[git commit] ash: revert wrong "fix" for an apparent memory leak. Closes 5822

Denys Vlasenko vda.linux at googlemail.com
Thu Jan 17 12:02:27 UTC 2013


commit: http://git.busybox.net/busybox/commit/?id=7c4b13e0190a645f4083741c7803e51984cf71cb
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/ash.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/shell/ash.c b/shell/ash.c
index eb13474..31fbc55 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -8677,8 +8677,17 @@ expredir(union node *n)
 #if ENABLE_ASH_BASH_COMPAT
  store_expfname:
 #endif
+#if 0
+// By the design of stack allocator, the loop of this kind:
+//	while true; do while true; do break; done </dev/null; done
+// will look like a memory leak: ash plans to free expfname's
+// of "/dev/null" as soon as it finishes running the loop
+// (in this case, never).
+// This "fix" is wrong:
 			if (redir->nfile.expfname)
 				stunalloc(redir->nfile.expfname);
+// It results in corrupted state of stacked allocations.
+#endif
 			redir->nfile.expfname = fn.list->text;
 			break;
 		case NFROMFD:


More information about the busybox-cvs mailing list