ash: revert wrong "fix" for an apparent memory leak. Closes 5822
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 17 Jan 2013 12:02:27 +0000 (13:02 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 17 Jan 2013 12:02:27 +0000 (13:02 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c

index eb13474472a33a3469edd0f8fdd732692d9b1b6d..31fbc550a62532ecb99a831a71ae7c31b7e2c312 100644 (file)
@@ -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: