@@ -104,6 +104,11 @@ Status PipeWindows::CreateNew(llvm::StringRef name) {
104104 if (INVALID_HANDLE_VALUE == m_read)
105105 return Status (::GetLastError (), eErrorTypeWin32);
106106 m_read_fd = _open_osfhandle ((intptr_t )m_read, _O_RDONLY);
107+ if (m_read_fd < 0 ) {
108+ ::CloseHandle (m_read);
109+ m_read = INVALID_HANDLE_VALUE;
110+ return Status (ERROR_INVALID_HANDLE, eErrorTypeWin32);
111+ }
107112 ZeroMemory (&m_read_overlapped, sizeof (m_read_overlapped));
108113 m_read_overlapped.hEvent = ::CreateEvent (nullptr , TRUE , FALSE , nullptr );
109114
@@ -176,6 +181,11 @@ Status PipeWindows::OpenNamedPipe(llvm::StringRef name, bool is_read) {
176181 return Status (::GetLastError (), eErrorTypeWin32);
177182
178183 m_read_fd = _open_osfhandle ((intptr_t )m_read, _O_RDONLY);
184+ if (m_read_fd < 0 ) {
185+ ::CloseHandle (m_read);
186+ m_read = INVALID_HANDLE_VALUE;
187+ return Status (ERROR_INVALID_HANDLE, eErrorTypeWin32);
188+ }
179189
180190 ZeroMemory (&m_read_overlapped, sizeof (m_read_overlapped));
181191 m_read_overlapped.hEvent = ::CreateEvent (nullptr , TRUE , FALSE , nullptr );
@@ -186,6 +196,11 @@ Status PipeWindows::OpenNamedPipe(llvm::StringRef name, bool is_read) {
186196 return Status (::GetLastError (), eErrorTypeWin32);
187197
188198 m_write_fd = _open_osfhandle ((intptr_t )m_write, _O_WRONLY);
199+ if (m_write_fd < 0 ) {
200+ ::CloseHandle (m_write);
201+ m_write = INVALID_HANDLE_VALUE;
202+ return Status (ERROR_INVALID_HANDLE, eErrorTypeWin32);
203+ }
189204
190205 ZeroMemory (&m_write_overlapped, sizeof (m_write_overlapped));
191206 m_write_overlapped.hEvent = ::CreateEventA (nullptr , TRUE , FALSE , nullptr );
0 commit comments