From 6a0a388c202098db207fff8e571f599296aa57d8 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Mon, 27 Jul 2015 12:24:27 +0300 Subject: [PATCH] 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. --- src/backend/access/nbtree/nbtree.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 9431ab5d04..cf4a6dc7c4 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 -- 2.40.0