Configuration Information [Automatically generated, do not change]:
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' 
-DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-unknown-linux-gnu' 
-DCONF_VENDOR='unknown' -DLOCALEDIR='/usr/local/share/locale' -DPACKAGE='bash' 
-DSHELL -DHAVE_CONFIG_H   -I.  -I. -I./include -I./lib   -g -O0 
-Wno-parentheses -Wno-format-security
uname output: Linux localhost.localdomain 4.11.6-201.fc25.x86_64 #1 SMP Tue Jun 
20 20:21:11 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Machine Type: x86_64-unknown-linux-gnu

Bash Version: 4.4
Patch Level: 12
Release Status: release

Description:
        read builtin goes into uninterruptible loop if input comes from 
/dev/zero.

Repeat-By:
        read -N 1 _ < /dev/zero

Fix:
        Attached patch fixes the bug.


-- 
--
Siteshwar Vashisht
From 8d49a26b2bf9c150d23526da0999d8d4fa38a4f7 Mon Sep 17 00:00:00 2001
From: Siteshwar Vashisht <svashi...@redhat.com>
Date: Fri, 28 Jul 2017 15:51:07 +0200
Subject: [PATCH] Make read builtin interruptible if input contains zeros

---
 builtins/read.def | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/builtins/read.def b/builtins/read.def
index 33821f3..de23ab0 100644
--- a/builtins/read.def
+++ b/builtins/read.def
@@ -609,7 +609,7 @@ read_builtin (list)
 	  break;
 	}
 
-      CHECK_ALRM;
+      check_signals();
 
 #if defined (READLINE)
 	}
@@ -662,7 +662,10 @@ read_builtin (list)
 	break;
 
       if (c == '\0' && delim != '\0')
-	continue;		/* skip NUL bytes in input */
+	{
+	  internal_warning ("read_builtin: ignored null byte in input");
+	  continue;		/* skip NUL bytes in input */
+	}
 
       if ((skip_ctlesc == 0 && c == CTLESC) || (skip_ctlnul == 0 && c == CTLNUL))
 	{
-- 
2.9.4

Reply via email to