diff options
author | Takashi Yano <takashi.yano@nifty.ne.jp> | 2024-11-06 14:06:58 +0900 |
---|---|---|
committer | Takashi Yano <takashi.yano@nifty.ne.jp> | 2024-11-06 17:46:10 +0900 |
commit | cbfaeba4f77b98219579b7569604de29e57cc9b9 (patch) | |
tree | 3b23bfd1f1f92bf6d2fc39e149484e32e665840c | |
parent | df0953aa298c0c6b92b8735c6a703239db36091d (diff) | |
download | newlib-cbfaeba4f77b98219579b7569604de29e57cc9b9.zip newlib-cbfaeba4f77b98219579b7569604de29e57cc9b9.tar.gz newlib-cbfaeba4f77b98219579b7569604de29e57cc9b9.tar.bz2 |
Cygwin: pipe: Fix incorrect write length in raw_write()
If the write length is more than the pipe space in non-blocking
mode, the write length is wrongly set to 65536. This causes access
violation. This patch fixes that.
Fixes: 7ed9adb356df ("Cygwin: pipe: Switch pipe mode to blocking mode by default")
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
-rw-r--r-- | winsup/cygwin/fhandler/pipe.cc | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/winsup/cygwin/fhandler/pipe.cc b/winsup/cygwin/fhandler/pipe.cc index a2729a1..76af6bc 100644 --- a/winsup/cygwin/fhandler/pipe.cc +++ b/winsup/cygwin/fhandler/pipe.cc @@ -532,10 +532,8 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len) } } - if (len <= (size_t) avail || pipe_buf_size == 0) + if (len <= (size_t) avail) chunk = len; - else if (is_nonblocking ()) - chunk = len = pipe_buf_size; else chunk = avail; @@ -555,7 +553,7 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len) ULONG len1; DWORD waitret = WAIT_OBJECT_0; - if (left > chunk) + if (left > chunk && !is_nonblocking ()) len1 = chunk; else len1 = (ULONG) left; |