diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2015-07-27 12:24:27 +0300 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2015-07-27 12:31:05 +0300 |
commit | 6a0a388c202098db207fff8e571f599296aa57d8 (patch) | |
tree | 698688b20ddc597d1e8a0f9a5b9767c6224432fa | |
parent | dd20a97219b569b92bdcbd0c195c214340298b4a (diff) | |
download | postgresql-6a0a388c202098db207fff8e571f599296aa57d8.tar.gz postgresql-6a0a388c202098db207fff8e571f599296aa57d8.zip |
Avoid calling PageGetSpecialPointer() on an all-zeros page.
That was otherwise harmless, but tripped the new assertion in
PageGetSpecialPointer().
Reported by Amit Langote. Backpatch to 9.5, where the assertion was added.
-rw-r--r-- | src/backend/access/nbtree/nbtree.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 9431ab5d042..cf4a6dc7c47 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -881,7 +881,7 @@ btvacuumpage(BTVacState *vstate, BlockNumber blkno, BlockNumber orig_blkno) BlockNumber recurse_to; Buffer buf; Page page; - BTPageOpaque opaque; + BTPageOpaque opaque = NULL; restart: delete_now = false; @@ -900,9 +900,11 @@ restart: info->strategy); LockBuffer(buf, BT_READ); page = BufferGetPage(buf); - opaque = (BTPageOpaque) PageGetSpecialPointer(page); if (!PageIsNew(page)) + { _bt_checkpage(rel, buf); + opaque = (BTPageOpaque) PageGetSpecialPointer(page); + } /* * If we are recursing, the only case we want to do anything with is a |