mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-08 07:10:12 -05:00
Debugger: Fix pipe connection error message construction on Windows
Adding an integer to a C string does pointer math, rather than
converting to string. Instead convert the result of `GetLastError` to
string before adding it to the error message.
This problem was accidentally introduced by commit 8b1257e7bf (Debugger:
Replace libuv with platform-specific connection code, 2023-07-29).
Signed-off-by: William R. Dieter <william.r.dieter@intel.com>
This commit is contained in:
committed by
Brad King
parent
91585ad105
commit
cd46ecad19
@@ -221,13 +221,28 @@ void cmDebuggerPipeClient_WIN32::WaitForConnection()
|
|||||||
NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
|
NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
|
||||||
if (hPipe == INVALID_HANDLE_VALUE) {
|
if (hPipe == INVALID_HANDLE_VALUE) {
|
||||||
auto err = GetLastError();
|
auto err = GetLastError();
|
||||||
throw std::runtime_error("CreateFile failed with " + err);
|
throw std::runtime_error(std::string("CreateFile failed for pipe ") +
|
||||||
|
GetErrorMessage(err));
|
||||||
}
|
}
|
||||||
|
|
||||||
pipes = std::make_unique<DuplexPipe_WIN32>(hPipe);
|
pipes = std::make_unique<DuplexPipe_WIN32>(hPipe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string cmDebuggerPipeClient_WIN32::GetErrorMessage(DWORD errorCode)
|
||||||
|
{
|
||||||
|
LPSTR message = nullptr;
|
||||||
|
DWORD size = FormatMessageA(
|
||||||
|
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
|
||||||
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
nullptr, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
|
(LPSTR)&message, 0, nullptr);
|
||||||
|
std::string errorMessage =
|
||||||
|
this->PipeName + ": " + std::string(message, size);
|
||||||
|
LocalFree(message);
|
||||||
|
return errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
bool cmDebuggerPipeClient_WIN32::isOpen()
|
bool cmDebuggerPipeClient_WIN32::isOpen()
|
||||||
{
|
{
|
||||||
return pipes != nullptr;
|
return pipes != nullptr;
|
||||||
|
|||||||
@@ -90,6 +90,8 @@ public:
|
|||||||
bool write(void const* buffer, size_t n) override;
|
bool write(void const* buffer, size_t n) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::string GetErrorMessage(DWORD errorCode);
|
||||||
|
|
||||||
std::string const PipeName;
|
std::string const PipeName;
|
||||||
std::unique_ptr<DuplexPipe_WIN32> pipes;
|
std::unique_ptr<DuplexPipe_WIN32> pipes;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user