zsh-workers
 help / color / mirror / code / Atom feed
* Disowned command killed when piping NUL character
@ 2023-07-19 22:25 Johan Grande
  2023-07-19 23:27 ` Bart Schaefer
  0 siblings, 1 reply; 2+ messages in thread
From: Johan Grande @ 2023-07-19 22:25 UTC (permalink / raw)
  To: zsh-workers

I notice the following inconsistency in behavior. Is it indeed a bug? 
The async job with the \0 doesn't print "hello" while the other two 
commands do.

% { print |read line; echo hello } &!
% hello

% { print '\0'|read -d $'\0' line; echo hello } &!
% print '\0'|read -d $'\0' line; echo hello
hello

With zsh 5.8.1 (x86_64-ubuntu-linux-gnu) and an empty ~/.zshrc.

-- 
Johan


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Disowned command killed when piping NUL character
  2023-07-19 22:25 Disowned command killed when piping NUL character Johan Grande
@ 2023-07-19 23:27 ` Bart Schaefer
  0 siblings, 0 replies; 2+ messages in thread
From: Bart Schaefer @ 2023-07-19 23:27 UTC (permalink / raw)
  To: Johan Grande; +Cc: zsh-workers

[-- Attachment #1: Type: text/plain, Size: 1645 bytes --]

On Wed, Jul 19, 2023 at 3:29 PM Johan Grande <nahoj@crans.org> wrote:

> I notice the following inconsistency in behavior. Is it indeed a bug?
>

If you change "&!" to just "&" you'll observe that the "read" is being
stopped by a TTOU signal.

This is happening because it's trying to reset the terminal from "cooked"
to "raw" mode on the assumption that it's reading from the shell's standard
input rather than the piped input.  The same thing will happen with the
"-s" option.

This probably should be considered a bug.  I believe the below is all
that's necessary, but would appreciate another eyeball.

diff --git a/Src/builtin.c b/Src/builtin.c
index 669a47092..1568cf44c 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -6483,7 +6483,7 @@ bin_read(char *name, char **args, Options ops,
UNUSED(int func))
     } else
  readfd = izle = 0;

-    if (OPT_ISSET(ops,'s') && SHTTY != -1) {
+    if (OPT_ISSET(ops,'s') && SHTTY == readfd) {
  struct ttyinfo ti;
  gettyinfo(&ti);
  saveti = ti;
@@ -6531,7 +6531,7 @@ bin_read(char *name, char **args, Options ops,
UNUSED(int func))
         delim = (unsigned char) ((delimstr[0] == Meta) ?
  delimstr[1] ^ 32 : delimstr[0]);
 #endif
- if (SHTTY != -1) {
+ if (SHTTY == readfd) {
     struct ttyinfo ti;
     gettyinfo(&ti);
     if (! resettty) {
@@ -6691,7 +6691,7 @@ bin_read(char *name, char **args, Options ops,
UNUSED(int func))
     /* dispose of result appropriately, etc. */
     if (isem)
  while (val > 0 && read(SHTTY, &d, 1) == 1 && d != '\n');
-    else {
+    else if (resettty) {
  settyinfo(&shttyinfo);
  resettty = 0;
     }

[-- Attachment #2: Type: text/html, Size: 2273 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-07-19 23:28 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-19 22:25 Disowned command killed when piping NUL character Johan Grande
2023-07-19 23:27 ` Bart Schaefer

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).