Skip to content

Commit

Permalink
Format Windows error message in Unicode
Browse files Browse the repository at this point in the history
- We assume that all text passed to the management interface
  and written to log file are in Unicode (UTF-8). This is broken by
  the use of the ANSI version of FormatMessage() for Windows error
  messages. Fix by using FormatMessageW() and converting the UTF-16
  result to UTF-8.

v2: assign return value of FormatMessageW() to DWORD, not int

Github: fixes OpenVPN/openvpn#319

Signed-off-by: Selva Nair <[email protected]>
Acked-by: Frank Lichtenheld <[email protected]>
Message-Id: <[email protected]>
URL: https://www.mail-archive.com/[email protected]/msg26598.html
Signed-off-by: Gert Doering <[email protected]>
  • Loading branch information
selvanair authored and cron2 committed May 4, 2023
1 parent 7b21c69 commit fed6764
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions src/openvpn/error.c
Original file line number Diff line number Diff line change
Expand Up @@ -970,19 +970,24 @@ strerror_win32(DWORD errnum, struct gc_arena *gc)

/* format a windows error message */
{
char message[256];
wchar_t wmessage[256];
char *message = NULL;
struct buffer out = alloc_buf_gc(256, gc);
const int status = FormatMessage(
const DWORD status = FormatMessageW(
FORMAT_MESSAGE_IGNORE_INSERTS
| FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_ARGUMENT_ARRAY,
NULL,
errnum,
0,
message,
sizeof(message),
wmessage,
SIZE(wmessage),
NULL);
if (!status)
if (status)
{
message = utf16to8(wmessage, gc);
}
if (!status || !message)
{
buf_printf(&out, "[Unknown Win32 Error]");
}
Expand Down

0 comments on commit fed6764

Please sign in to comment.