From 87f9e379ef4618d434ebc376d7d63a98ad620273 Mon Sep 17 00:00:00 2001 From: Siteshwar Vashisht Date: Fri, 28 Jul 2017 15:51:07 +0200 Subject: [PATCH] Make read builtin interruptible if input contains zeros --- builtins/read.def | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/builtins/read.def b/builtins/read.def index 33821f3..4865c36 100644 --- a/builtins/read.def +++ b/builtins/read.def @@ -194,6 +194,7 @@ read_builtin (list) struct stat tsb; SHELL_VAR *var; TTYSTRUCT ttattrs, ttset; + int nullbyte; #if defined (ARRAY_VARS) WORD_LIST *alist; #endif @@ -243,6 +244,7 @@ read_builtin (list) nr = nchars = input_is_tty = input_is_pipe = unbuffered_read = have_timeout = 0; delim = '\n'; /* read until newline */ ignore_delim = 0; + nullbyte = 0; reset_internal_getopt (); while ((opt = internal_getopt (list, "ersa:d:i:n:p:t:u:N:")) != -1) @@ -609,7 +611,7 @@ read_builtin (list) break; } - CHECK_ALRM; + check_signals(); #if defined (READLINE) } @@ -662,7 +664,14 @@ read_builtin (list) break; if (c == '\0' && delim != '\0') - continue; /* skip NUL bytes in input */ + { + if (nullbyte == 0) + { + internal_warning ("read_builtin: ignored null byte in input"); + nullbyte = 1; + } + continue; /* skip NUL bytes in input */ + } if ((skip_ctlesc == 0 && c == CTLESC) || (skip_ctlnul == 0 && c == CTLNUL)) { -- 2.9.4