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
William R. Dieter 2023-08-25 23:00:08 -07:00 committed by Brad King
parent 91585ad105
commit cd46ecad19
2 changed files with 18 additions and 1 deletions

View File

@ -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;

View File

@ -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;
};