FormatMessage only writes the output pointer when it succeeds. On failure
it returns 0 and leaves lpMsgBuf untouched, so constructing a std::string
from it ran strlen over an indeterminate stack value.
Initialize the pointer, check FormatMessage's return, and fall back to
reporting the raw system error code. Also release the buffer that
FORMAT_MESSAGE_ALLOCATE_BUFFER allocates, which previously leaked on
every successful call.
Fixes #3714
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012SRueobKykUocB1SRdHsEE
FormatMessage leaves the output pointer untouched when it fails, and getErrorMessage read it uninitialized and never freed the buffer on success. Check the result, return a fallback with the system error code, and LocalFree the buffer. Fixes #3714.