Skip to content
Snippets Groups Projects
Commit 9dc65bcf authored by Noah Misch's avatar Noah Misch
Browse files

Fail pgwin32_message_to_UTF16() for SQL_ASCII messages.

The function had been interpreting SQL_ASCII messages as UTF8, throwing
an error when they were invalid UTF8.  The new behavior is consistent
with pg_do_encoding_conversion().  This affects LOG_DESTINATION_STDERR
and LOG_DESTINATION_EVENTLOG, which will send untranslated bytes to
write() and ReportEventA().  On buildfarm member bowerbird, enabling
log_connections caused an error whenever the role name was not valid
UTF8.  Back-patch to 9.4 (all supported versions).

Discussion: https://postgr.es/m/20190512015615.GD1124997@rfd.leadboat.com
parent 899f943c
No related branches found
No related tags found
No related merge requests found
......@@ -1057,11 +1057,16 @@ GetMessageEncoding(void)
WCHAR *
pgwin32_message_to_UTF16(const char *str, int len, int *utf16len)
{
int msgenc = GetMessageEncoding();
WCHAR *utf16;
int dstlen;
UINT codepage;
codepage = pg_enc2name_tbl[GetMessageEncoding()].codepage;
if (msgenc == PG_SQL_ASCII)
/* No conversion is possible, and SQL_ASCII is never utf16. */
return NULL;
codepage = pg_enc2name_tbl[msgenc].codepage;
/*
* Use MultiByteToWideChar directly if there is a corresponding codepage,
......@@ -1086,7 +1091,7 @@ pgwin32_message_to_UTF16(const char *str, int len, int *utf16len)
{
utf8 = (char *) pg_do_encoding_conversion((unsigned char *) str,
len,
GetMessageEncoding(),
msgenc,
PG_UTF8);
if (utf8 != str)
len = strlen(utf8);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment