Module Name: src Committed By: kre Date: Tue Nov 16 11:27:50 UTC 2021
Modified Files: src/bin/sh: eval.c miscbltin.c redir.c Log Message: Detect write errors to stdout, and exit(1) from some built-in commands which (primarily) are used just to generate output (or with a particular option combination do so). To generate a diff of this commit: cvs rdiff -u -r1.184 -r1.185 src/bin/sh/eval.c cvs rdiff -u -r1.45 -r1.46 src/bin/sh/miscbltin.c cvs rdiff -u -r1.70 -r1.71 src/bin/sh/redir.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/bin/sh/eval.c diff -u src/bin/sh/eval.c:1.184 src/bin/sh/eval.c:1.185 --- src/bin/sh/eval.c:1.184 Tue Nov 16 11:25:44 2021 +++ src/bin/sh/eval.c Tue Nov 16 11:27:50 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: eval.c,v 1.184 2021/11/16 11:25:44 kre Exp $ */ +/* $NetBSD: eval.c,v 1.185 2021/11/16 11:27:50 kre Exp $ */ /*- * Copyright (c) 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)eval.c 8.9 (Berkeley) 6/8/95"; #else -__RCSID("$NetBSD: eval.c,v 1.184 2021/11/16 11:25:44 kre Exp $"); +__RCSID("$NetBSD: eval.c,v 1.185 2021/11/16 11:27:50 kre Exp $"); #endif #endif /* not lint */ @@ -1346,6 +1346,7 @@ evalcommand(union node *cmd, int flgs, s optreset = 1; optind = 1; builtin_flags = flags; + clr_err(out1); /* discard previous I/O errors */ exitstatus = cmdentry.u.bltin(argc, argv); } else { e = exception; Index: src/bin/sh/miscbltin.c diff -u src/bin/sh/miscbltin.c:1.45 src/bin/sh/miscbltin.c:1.46 --- src/bin/sh/miscbltin.c:1.45 Wed Sep 15 18:30:57 2021 +++ src/bin/sh/miscbltin.c Tue Nov 16 11:27:50 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: miscbltin.c,v 1.45 2021/09/15 18:30:57 kre Exp $ */ +/* $NetBSD: miscbltin.c,v 1.46 2021/11/16 11:27:50 kre Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)miscbltin.c 8.4 (Berkeley) 5/4/95"; #else -__RCSID("$NetBSD: miscbltin.c,v 1.45 2021/09/15 18:30:57 kre Exp $"); +__RCSID("$NetBSD: miscbltin.c,v 1.46 2021/11/16 11:27:50 kre Exp $"); #endif #endif /* not lint */ @@ -288,6 +288,11 @@ umaskcmd(int argc, char **argv) umask(~mask & 0777); } } + flushout(out1); + if (io_err(out1)) { + out2str("umask: I/O error\n"); + return 1; + } return 0; } @@ -445,7 +450,7 @@ ulimitcmd(int argc, char **argv) out1fmt("%c", which ? '\t' : '\n'); } } - return 0; + goto done; } if (getrlimit(l->cmd, &limit) == -1) @@ -477,5 +482,11 @@ ulimitcmd(int argc, char **argv) #endif } } + done:; + flushout(out1); + if (io_err(out1)) { + out2str("ulimit: I/O error (stdout)\n"); + return 1; + } return 0; } Index: src/bin/sh/redir.c diff -u src/bin/sh/redir.c:1.70 src/bin/sh/redir.c:1.71 --- src/bin/sh/redir.c:1.70 Wed Nov 10 15:26:34 2021 +++ src/bin/sh/redir.c Tue Nov 16 11:27:50 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: redir.c,v 1.70 2021/11/10 15:26:34 kre Exp $ */ +/* $NetBSD: redir.c,v 1.71 2021/11/16 11:27:50 kre Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)redir.c 8.2 (Berkeley) 5/4/95"; #else -__RCSID("$NetBSD: redir.c,v 1.70 2021/11/10 15:26:34 kre Exp $"); +__RCSID("$NetBSD: redir.c,v 1.71 2021/11/16 11:27:50 kre Exp $"); #endif #endif /* not lint */ @@ -1033,10 +1033,8 @@ fdflagscmd(int argc, char *argv[]) for (i = 0; i <= max_user_fd; i++) printone(i, 0, verbose, 1); - return 0; - } - while ((num = *argv++) != NULL) { + } else while ((num = *argv++) != NULL) { int fd = number(num); while (num[0] == '0' && num[1] != '\0') /* skip 0's */ @@ -1050,6 +1048,11 @@ fdflagscmd(int argc, char *argv[]) else printone(fd, 1, verbose, argc > 1); } + flushout(out1); + if (io_err(out1)) { + out2str("fdflags: I/O error\n"); + return 1; + } return 0; }