summaryrefslogtreecommitdiff
path: root/src/backend/utils/error/elog.c
diff options
context:
space:
mode:
authorNoah Misch <noah@leadboat.com>2017-11-12 13:03:15 -0800
committerNoah Misch <noah@leadboat.com>2017-11-12 13:03:15 -0800
commite02571b73f2d8124fe75d7408f9b63d4c5fe03b0 (patch)
treefe66bf481b2247c80dd487e05c9ddec2f7fa55f8 /src/backend/utils/error/elog.c
parent0b7e76eb2b142d0b4a2a831e7fa1fac44820f52c (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/backend/utils/error/elog.c')
-rw-r--r--src/backend/utils/error/elog.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index f6bb05f135e..9cdc07f0067 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -2117,10 +2117,15 @@ write_eventlog(int level, const char *line, int len)
* try to convert the message to UTF16 and write it with ReportEventW().
* Fall back on 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_message_to_UTF16().
*/
if (!in_error_recursion_trouble() &&
+ CurrentMemoryContext != NULL &&
GetMessageEncoding() != GetACPEncoding())
{
utf16 = pgwin32_message_to_UTF16(line, len, NULL);