mirror of
https://github.com/postgres/postgres.git
synced 2025-05-12 16:21:30 +03:00
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
This commit is contained in:
parent
27d3394b0d
commit
ff7555c4f1
@ -1057,11 +1057,16 @@ GetMessageEncoding(void)
|
|||||||
WCHAR *
|
WCHAR *
|
||||||
pgwin32_message_to_UTF16(const char *str, int len, int *utf16len)
|
pgwin32_message_to_UTF16(const char *str, int len, int *utf16len)
|
||||||
{
|
{
|
||||||
|
int msgenc = GetMessageEncoding();
|
||||||
WCHAR *utf16;
|
WCHAR *utf16;
|
||||||
int dstlen;
|
int dstlen;
|
||||||
UINT codepage;
|
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,
|
* 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,
|
utf8 = (char *) pg_do_encoding_conversion((unsigned char *) str,
|
||||||
len,
|
len,
|
||||||
GetMessageEncoding(),
|
msgenc,
|
||||||
PG_UTF8);
|
PG_UTF8);
|
||||||
if (utf8 != str)
|
if (utf8 != str)
|
||||||
len = strlen(utf8);
|
len = strlen(utf8);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user