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)
>>
>>
>>>
>>
>

Reply via email to