From: Andres Freund Date: Thu, 8 Jan 2015 12:35:04 +0000 (+0100) Subject: Protect against XLogReaderAllocate() failing to allocate memory. X-Git-Tag: REL9_4_1~54 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ed5b0f79512aa37fc92d2097bc9a0b93a27eaee2;p=postgresql Protect against XLogReaderAllocate() failing to allocate memory. logical.c's StartupDecodingContext() forgot to check whether XLogReaderAllocate() returns NULL indicating a memory allocation failure. This could lead, although quite unlikely, lead to a NULL pointer dereference. This only applies to 9.4 as earlier versions don't do logical decoding, and later versions don't return NULL after allocation failures in XLogReaderAllocate(). Michael Paquier, with minor changes by me. --- diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index 80b61020be..156c4181ec 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -162,6 +162,11 @@ StartupDecodingContext(List *output_plugin_options, ctx->slot = slot; ctx->reader = XLogReaderAllocate(read_page, ctx); + if (!ctx->reader) + ereport(ERROR, + (errcode(ERRCODE_OUT_OF_MEMORY), + errmsg("out of memory"))); + ctx->reader->private_data = ctx; ctx->reorder = ReorderBufferAllocate();