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>
stage/master/nightly/2023/09/09^2
parent
91585ad105
commit
cd46ecad19
|
@ -221,13 +221,28 @@ void cmDebuggerPipeClient_WIN32::WaitForConnection()
|
|||
NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
|
||||
if (hPipe == INVALID_HANDLE_VALUE) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
return pipes != nullptr;
|
||||
|
|
|
@ -90,6 +90,8 @@ public:
|
|||
bool write(void const* buffer, size_t n) override;
|
||||
|
||||
private:
|
||||
std::string GetErrorMessage(DWORD errorCode);
|
||||
|
||||
std::string const PipeName;
|
||||
std::unique_ptr<DuplexPipe_WIN32> pipes;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue