From 3d364b98c0c31c72ec2df382af2631ca414e4ff8 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Thu, 31 Oct 2024 11:52:26 +0100 Subject: [PATCH] Cygwin: pipe: fix shift value The expression computing the next-less-power of 2 for the next write when the pipe buffer is getting filled up allows negative shift values. This works on Intel CPUs because the shift expression only evaluates the 5 LSBs, but it's undefined behaviour per the C standard. Use the correct expression to get a positive shift value. Fixes: 170e6badb621 ("Cygwin: pipe: improve writing when pipe buffer is almost full") Reported-by: Takashi Yano Signed-off-by: Corinna Vinschen --- winsup/cygwin/fhandler/pipe.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/winsup/cygwin/fhandler/pipe.cc b/winsup/cygwin/fhandler/pipe.cc index 3b78cc183..6a1ef03b6 100644 --- a/winsup/cygwin/fhandler/pipe.cc +++ b/winsup/cygwin/fhandler/pipe.cc @@ -580,7 +580,7 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len) else if (avail >= PIPE_BUF) len1 = avail & ~(PIPE_BUF - 1); else - len1 = 1 << (31 - __builtin_clzl (avail)); + len1 = 1 << (63 - __builtin_clzl (avail)); short_write_once = true; } if (isclosed ()) /* A signal handler might have closed the fd. */