diff options
author | Fujii Masao <fujii@postgresql.org> | 2015-04-03 21:55:37 +0900 |
---|---|---|
committer | Fujii Masao <fujii@postgresql.org> | 2015-04-03 21:55:37 +0900 |
commit | 6e4bf4ecd3c2a266870139462a079809dfe7ab8c (patch) | |
tree | 8e363162645de6b1826003944e3b9a93e1a28e26 /src/backend/access/transam/xlog.c | |
parent | f85155e18cb71a599724536e598e8d6f5e140454 (diff) | |
download | postgresql-6e4bf4ecd3c2a266870139462a079809dfe7ab8c.tar.gz postgresql-6e4bf4ecd3c2a266870139462a079809dfe7ab8c.zip |
Fix error handling of XLogReaderAllocate in case of OOM
Similarly to previous fix 9b8d478, commit 2c03216 has switched
XLogReaderAllocate() to use a set of palloc calls instead of malloc,
causing any callers of this function to fail with an error instead of
receiving a NULL pointer in case of out-of-memory error. Fix this by
using palloc_extended with MCXT_ALLOC_NO_OOM that will safely return
NULL in case of an OOM.
Michael Paquier, slightly modified by me.
Diffstat (limited to 'src/backend/access/transam/xlog.c')
-rw-r--r-- | src/backend/access/transam/xlog.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 346a2b39f85..24cf520e579 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -1062,8 +1062,11 @@ XLogInsertRecord(XLogRecData *rdata, XLogRecPtr fpw_lsn) if (!debug_reader) debug_reader = XLogReaderAllocate(NULL, NULL); - if (!debug_reader || - !DecodeXLogRecord(debug_reader, (XLogRecord *) recordBuf.data, + if (!debug_reader) + { + appendStringInfo(&buf, "error decoding record: out of memory"); + } + else if (!DecodeXLogRecord(debug_reader, (XLogRecord *) recordBuf.data, &errormsg)) { appendStringInfo(&buf, "error decoding record: %s", |