Commit a3ef2c16 authored by John Denker's avatar John Denker Committed by Rich Salz
Browse files

RT2759: Don't read TTY when already at EOF.

parent 7315ce80
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -818,6 +818,7 @@ int s_client_main(int argc, char **argv)
    int socket_family = AF_UNSPEC, socket_type = SOCK_STREAM;
    int starttls_proto = PROTO_OFF, crl_format = FORMAT_PEM, crl_download = 0;
    int write_tty, read_tty, write_ssl, read_ssl, tty_on, ssl_pending;
    int at_eof = 0;
    int read_buf_len = 0;
    int fallback_scsv = 0;
    long randamt = 0;
@@ -2123,7 +2124,12 @@ int s_client_main(int argc, char **argv)
        if (!ssl_pending) {
#if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS)
            if (tty_on) {
                if (read_tty)
                /*
                 * Note that select() returns when read _would not block_,
                 * and EOF satisfies that.  To avoid a CPU-hogging loop,
                 * set the flag so we exit.
                 */
                if (read_tty && !at_eof)
                    openssl_fdset(fileno(stdin), &readfds);
                if (write_tty)
                    openssl_fdset(fileno(stdout), &writefds);
@@ -2369,6 +2375,9 @@ int s_client_main(int argc, char **argv)
            } else
                i = raw_read_stdin(cbuf, BUFSIZZ);

            if (i == 0)
                at_eof = 1;

            if ((!c_ign_eof) && ((i <= 0) || (cbuf[0] == 'Q' && cmdletters))) {
                BIO_printf(bio_err, "DONE\n");
                ret = 0;