*** a/src/backend/access/transam/xlogreader.c
--- b/src/backend/access/transam/xlogreader.c
***************
*** 149,155 **** allocate_recordbuf(XLogReaderState *state, uint32 reclength)
  
  	if (state->readRecordBuf)
  		pfree(state->readRecordBuf);
! 	state->readRecordBuf = (char *) palloc(newSize);
  	state->readRecordBufSize = newSize;
  	return true;
  }
--- 149,163 ----
  
  	if (state->readRecordBuf)
  		pfree(state->readRecordBuf);
! 	state->readRecordBuf =
! 		(char *) MemoryContextAllocExtended(CurrentMemoryContext,
! 											newSize,
! 											MCXT_ALLOC_NO_OOM);
! 	if (state->readRecordBuf == NULL)
! 	{
! 		state->readRecordBufSize = 0;
! 		return false;
! 	}
  	state->readRecordBufSize = newSize;
  	return true;
  }
