diff options
author | Takashi Yano <takashi.yano@nifty.ne.jp> | 2020-02-10 20:42:45 +0900 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2020-02-10 15:31:29 +0100 |
commit | 2379142bc5d345421acb9e3ac86abcad0d7bf71e (patch) | |
tree | 224895413bd3dfda8922046868bd37abc54e00c7 | |
parent | 2de74af22be0ccf75f094caf48c8beb36a49d8c9 (diff) | |
download | cygnal-2379142bc5d345421acb9e3ac86abcad0d7bf71e.tar.gz cygnal-2379142bc5d345421acb9e3ac86abcad0d7bf71e.tar.bz2 cygnal-2379142bc5d345421acb9e3ac86abcad0d7bf71e.zip |
Cygwin: pty: Prevent potential errno overwriting.
- In push_to_pcon_screenbuffer(), open() and ioctl() are called.
Since push_to_pcon_screenbuffer() is called in read() and write(),
errno which is set in read() and write() code may be overwritten
in open() or ioctl() call. This patch prevent this situation.
-rw-r--r-- | winsup/cygwin/fhandler_tty.cc | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc index 260776a56..cfd4b1c44 100644 --- a/winsup/cygwin/fhandler_tty.cc +++ b/winsup/cygwin/fhandler_tty.cc @@ -1412,10 +1412,13 @@ fhandler_pty_slave::push_to_pcon_screenbuffer (const char *ptr, size_t len, while (!GetConsoleMode (get_output_handle (), &dwMode)) { termios_printf ("GetConsoleMode failed, %E"); + int errno_save = errno; /* Re-open handles */ this->open (0, 0); /* Fix pseudo console window size */ this->ioctl (TIOCSWINSZ, &get_ttyp ()->winsize); + if (errno != errno_save) + set_errno (errno_save); if (++retry_count > 3) goto cleanup; } |