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:24:27 +0300 |
commit | 65c384c5abee7df6d27f98135790ea24c1b9578b (patch) | |
tree | 7b19acf70a5abe2155d9631b5694a6693c6957bc | |
parent | e3a9a194b7cb70a8c01deeff9f876a2631f1be06 (diff) | |
download | postgresql-65c384c5abee7df6d27f98135790ea24c1b9578b.tar.gz postgresql-65c384c5abee7df6d27f98135790ea24c1b9578b.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 |