Auto variables have unspecified values after a call to longjmp. This patch fixes the bug.
regards, Dmitry diff --git a/builtins/read.def b/builtins/read.def index 5e2348c..938b62a 100644 --- a/builtins/read.def +++ b/builtins/read.def @@ -181,7 +181,8 @@ read_builtin (list) WORD_LIST *list; { register char *varname; - int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2; + int size, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2; + volatile int i; int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul; int raw, edit, nchars, silent, have_timeout, ignore_delim, fd, lastsig, t_errno; unsigned int tmsec, tmusec; On Thu, Nov 24, 2016 at 10:32 PM, Clark Wang <dearv...@gmail.com> wrote: > On Fri, Nov 25, 2016 at 7:05 AM, L A Walsh <b...@tlinx.org> wrote: > >> >> >> isabella parakiss wrote: >> >>> that's not true https://gist.github.com/fa4efd90376ff2714901e4429fdee734 >>> read successfully reads the data, but then it's discarded by bash >>> >>> >> ---- >> It's discarded by bash because the read doesn't read 10 >> characters within the time limit. If you use -N 5, you get >> your output. "-t" says it will timeout and return failure if a >> specified number of characters is not read within timeout period. >> > > The manual for -t says: > > If read times out, read saves any partial input read into the specified > variable *name*. > > -clark > > > If timeout is exceeded, then return status is > 128: >> >> bash -c '( printf 12345; sleep 2 ) | ( read -t 1 -N 10 v; echo "s=$?, >> <$v>" )' >> s=142, <> >> >> (status is > 128) >> >> >>> >> >