aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2012-09-06 13:28:10 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2012-09-06 13:28:10 +0200
commit9e71e3cea59c06d40234d8f3363c3f05112e8d5a (patch)
tree1a483c9e1482fa83465563f15f1ad2ecaef22e98
parent50157f3decce78d3172314a5f97363faedba565a (diff)
downloadbusybox-w32-9e71e3cea59c06d40234d8f3363c3f05112e8d5a.tar.gz
busybox-w32-9e71e3cea59c06d40234d8f3363c3f05112e8d5a.tar.bz2
busybox-w32-9e71e3cea59c06d40234d8f3363c3f05112e8d5a.zip
ash: fix "read -s" + ^C. Closes 5504
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/ash.c5
-rw-r--r--shell/shell_common.c2
2 files changed, 6 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c
index b20c32b89..153bcc057 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -12803,6 +12803,10 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
12803 } 12803 }
12804 } 12804 }
12805 12805
12806 /* "read -s" needs to save/restore termios, can't allow ^C
12807 * to jump out of it.
12808 */
12809 INT_OFF;
12806 r = shell_builtin_read(setvar2, 12810 r = shell_builtin_read(setvar2,
12807 argptr, 12811 argptr,
12808 bltinlookup("IFS"), /* can be NULL */ 12812 bltinlookup("IFS"), /* can be NULL */
@@ -12812,6 +12816,7 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
12812 opt_t, 12816 opt_t,
12813 opt_u 12817 opt_u
12814 ); 12818 );
12819 INT_ON;
12815 12820
12816 if ((uintptr_t)r > 1) 12821 if ((uintptr_t)r > 1)
12817 ash_msg_and_raise_error(r); 12822 ash_msg_and_raise_error(r);
diff --git a/shell/shell_common.c b/shell/shell_common.c
index 780e27ebd..0051f21d9 100644
--- a/shell/shell_common.c
+++ b/shell/shell_common.c
@@ -170,7 +170,7 @@ shell_builtin_read(void FAST_FUNC (*setvar)(const char *name, const char *val),
170 int timeout; 170 int timeout;
171 171
172 if ((bufpos & 0xff) == 0) 172 if ((bufpos & 0xff) == 0)
173 buffer = xrealloc(buffer, bufpos + 0x100); 173 buffer = xrealloc(buffer, bufpos + 0x101);
174 174
175 timeout = -1; 175 timeout = -1;
176 if (end_ms) { 176 if (end_ms) {