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 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);