Commit 4f9f4958 authored by Robert Haas's avatar Robert Haas

Fix crash bug in RestoreSnapshot.

If serialized_snapshot->subxcnt > 0 and serialized_snapshot->xcnt == 0,
the old coding would do the wrong thing and crash.  This can happen
on standby servers.

Report by Andreas Seltenreich.  Patch by Thomas Munro, reviewed by
Amit Kapila and tested by Andreas Seltenreich.
parent 10c0558f
...@@ -2016,7 +2016,8 @@ RestoreSnapshot(char *start_address) ...@@ -2016,7 +2016,8 @@ RestoreSnapshot(char *start_address)
/* Copy SubXIDs, if present. */ /* Copy SubXIDs, if present. */
if (serialized_snapshot->subxcnt > 0) if (serialized_snapshot->subxcnt > 0)
{ {
snapshot->subxip = snapshot->xip + serialized_snapshot->xcnt; snapshot->subxip = ((TransactionId *) (snapshot + 1)) +
serialized_snapshot->xcnt;
memcpy(snapshot->subxip, serialized_xids + serialized_snapshot->xcnt, memcpy(snapshot->subxip, serialized_xids + serialized_snapshot->xcnt,
serialized_snapshot->subxcnt * sizeof(TransactionId)); serialized_snapshot->subxcnt * sizeof(TransactionId));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment