Skip to content

Commit c512963

Browse files
[lldb][windows] Close pipe HANDLE if _open_osfhandle fails (#200882)
1 parent 9def57a commit c512963

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

lldb/source/Host/windows/PipeWindows.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)