From da05b66b6d580781850f10122f720b8771a739f7 Mon Sep 17 00:00:00 2001 From: Ralph Corderoy Date: Thu, 7 Sep 2017 10:16:36 +0100 Subject: [PATCH] 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. --- sbr/getpass.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); -- 2.56.0