1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-31 03:21:24 +03:00

Don't call pgwin32_message_to_UTF16() without CurrentMemoryContext.

PostgreSQL running as a Windows service crashed upon calling
write_stderr() before MemoryContextInit().  This fix completes work
started in 5735efee15540765315aa8c1a230575e756037f7.  Messages this
early contain only ASCII bytes; if we removed the CurrentMemoryContext
requirement, the ensuing conversions would have no effect.  Back-patch
to 9.3 (all supported versions).

Takayuki Tsunakawa, reviewed by Michael Paquier.

Discussion: https://postgr.es/m/0A3221C70F24FB45833433255569204D1F80CC73@G01JPEXMBYT05
This commit is contained in:
Noah Misch 2017-11-12 13:03:15 -08:00
parent 4cd5d8a9eb
commit 30e99efe82

View File

@ -1910,11 +1910,16 @@ write_eventlog(int level, const char *line, int len)
* Convert message to UTF16 text and write it with ReportEventW, but
* fall-back into ReportEventA if conversion failed.
*
* Since we palloc the structure required for conversion, also fall
* through to writing unconverted if we have not yet set up
* CurrentMemoryContext.
*
* Also verify that we are not on our way into error recursion trouble due
* to error messages thrown deep inside pgwin32_toUTF16().
*/
if (GetDatabaseEncoding() != GetPlatformEncoding() &&
!in_error_recursion_trouble())
!in_error_recursion_trouble() &&
CurrentMemoryContext != NULL)
{
utf16 = pgwin32_toUTF16(line, len, NULL);
if (utf16)