On 08/18/2011 03:12 PM, Dennis Groenen wrote:
There is, however, one (major) blocker with my patch. For some reason,
both the conditions "G.line_input_state->flags&  SAVE_HISTORY" and
"G.line_input_state->hist_file" are true in hush when hush is not being
ran as an interactive shell (e.g. hush -c "echo hello"). Saving shell
history upon shell exit then will of course cause hush to segfault. Is
there a bug in hush causing those conditions to be true, or am I
overlooking something (in hush_exit())? This problem does not occur in
ash, which shares most of its history handling code with hush. Any input
on this is highly appreciated.
--Dennis

I've attached a patch that simply unsets the SAVE_HISTORY flag early in hush_main(), and re-sets it at the point hush gets interactive. This fixes the blocker quoted above.

--Dennis

>From 1984162085863e3a03db0366e6c2f27bb8800ba1 Mon Sep 17 00:00:00 2001
From: Dennis Groenen <[email protected]>
Date: Sun, 21 Aug 2011 12:14:05 +0200
Subject: [PATCH] hush: don't save history when non-interactive

---
 shell/hush.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/shell/hush.c b/shell/hush.c
index 6c68bfe..c4ab0a0 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -7834,6 +7834,7 @@ int hush_main(int argc, char **argv)
 				//set_local_var(xasprintf("HISTFILE=%s", ...));
 			}
 		}
+		G.line_input_state->flags &= ~SAVE_HISTORY; /* hush is non-interactive at this point */
 # if ENABLE_FEATURE_SH_HISTFILESIZE
 		hp = get_local_var_value("HISTFILESIZE");
 		G.line_input_state->max_history = size_from_HISTFILESIZE(hp);
@@ -8055,6 +8056,13 @@ int hush_main(int argc, char **argv)
 	 *    standard output is a terminal
 	 * Refer to Posix.2, the description of the 'sh' utility.
 	 */
+
+#if ENABLE_FEATURE_EDITING
+# if defined MAX_HISTORY && MAX_HISTORY > 0 && ENABLE_HUSH_SAVEHISTORY
+	G.line_input_state->flags |= SAVE_HISTORY;
+# endif
+#endif
+
 #if ENABLE_HUSH_JOB
 	if (isatty(STDIN_FILENO) && isatty(STDOUT_FILENO)) {
 		G_saved_tty_pgrp = tcgetpgrp(STDIN_FILENO);
-- 
1.7.6

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to