From f31c3b677d588795b18f02a6b8de22057bfab4af Mon Sep 17 00:00:00 2001
From: Denis Vlasenko <vda.linux@googlemail.com>
Date: Wed, 20 Aug 2008 00:46:32 +0000
Subject: linedit: fix use-after-free

---
 libbb/lineedit.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/libbb/lineedit.c b/libbb/lineedit.c
index 3e16f6423..a68e5a3c0 100644
--- a/libbb/lineedit.c
+++ b/libbb/lineedit.c
@@ -1357,6 +1357,7 @@ static void win_changed(int nsig)
  */
 int FAST_FUNC read_line_input(const char *prompt, char *command, int maxsize, line_input_t *st)
 {
+	int len;
 #if ENABLE_FEATURE_TAB_COMPLETION
 	smallint lastWasTab = FALSE;
 #endif
@@ -1376,7 +1377,6 @@ int FAST_FUNC read_line_input(const char *prompt, char *command, int maxsize, li
 	 || !(initial_settings.c_lflag & ECHO)
 	) {
 		/* Happens when e.g. stty -echo was run before */
-		int len;
 		parse_and_put_prompt(prompt);
 		fflush(stdout);
 		if (fgets(command, maxsize, stdin) == NULL)
@@ -1843,9 +1843,10 @@ int FAST_FUNC read_line_input(const char *prompt, char *command, int maxsize, li
 	signal(SIGWINCH, previous_SIGWINCH_handler);
 	fflush(stdout);
 
+	len = command_len;
 	DEINIT_S();
 
-	return command_len;
+	return len; /* can't return command_len, DEINIT_S() destroys it */
 }
 
 line_input_t* FAST_FUNC new_line_input_t(int flags)
-- 
cgit v1.2.3