From: Ralph Corderoy Date: Thu, 7 Sep 2017 09:16:36 +0000 (+0100) Subject: getpass.c: Don't fileno(NULL) when fopen("/dev/tty") fails. X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/da05b66b6d580781850f10122f720b8771a739f7?hp=ed4e21fb32d214ed9c45d0bd4eac9d3dd8ee6c9d getpass.c: Don't fileno(NULL) when fopen("/dev/tty") fails. If stdin is a TTY, but opening it for writing fails, then stdin and stderr are used as defaults and the TTY doesn't have echo disabled. The later test to restore echo just checks if stdin is a TTY and not that it was opened successfully causing a NULL FILE pointer to be fileno(3)'d. Fixes da6af9633. This function's logic remains a bit contorted; I went for the minimal fix. --- diff --git a/sbr/getpass.c b/sbr/getpass.c index 4b24af3c..12805f2f 100644 --- a/sbr/getpass.c +++ b/sbr/getpass.c @@ -78,7 +78,7 @@ nmh_getpass(const char *prompt) *p++ = ch; *p = '\0'; - if (istty) { + if (istty && fin != stdin) { (void)tcsetattr(fileno(fin), TCSANOW, &oterm); rewind(fout); (void)fputc('\n', fout);