diff options
author | Noah Misch <noah@leadboat.com> | 2017-11-12 13:03:15 -0800 |
---|---|---|
committer | Noah Misch <noah@leadboat.com> | 2017-11-12 13:05:55 -0800 |
commit | 30e99efe82c71c0320983dee5a9789e9f3f8a8e3 (patch) | |
tree | e8d079fc7e6172dce250428c858d3765ced85d4e /src | |
parent | 4cd5d8a9eb7be2906602a97d39c2bd4fb9e8153f (diff) |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/utils/error/elog.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index fcb5f180b23..6c72f23c5db 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -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) |