From 6a468c343b31aabead7d3a5e11079bfcddbfd667 Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
Date: Thu, 9 Mar 2017 12:13:48 -0500
Subject: [PATCH] Fix bug in parallel tidbitmap iteration.

Avoid computing idxpages[istate->spageptr] until after checking
that istate->spageptr is a legal index.

Dilip Kumar, per a report from David Rowley

Discussion: http://postgr.es/m/CAKJS1f8OtrHE+-P+=E=4ycnL29e9idZKuaTQ6o2MbhvGN9D8ig@mail.gmail.com
---
 src/backend/nodes/tidbitmap.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/backend/nodes/tidbitmap.c b/src/backend/nodes/tidbitmap.c
index 44cc9daa03f..8e915646d93 100644
--- a/src/backend/nodes/tidbitmap.c
+++ b/src/backend/nodes/tidbitmap.c
@@ -1103,13 +1103,12 @@ tbm_shared_iterate(TBMSharedIterator *iterator)
 	if (istate->schunkptr < istate->nchunks)
 	{
 		PagetableEntry *chunk = &ptbase[idxchunks[istate->schunkptr]];
-		PagetableEntry *page = &ptbase[idxpages[istate->spageptr]];
 		BlockNumber chunk_blockno;
 
 		chunk_blockno = chunk->blockno + istate->schunkbit;
 
 		if (istate->spageptr >= istate->npages ||
-			chunk_blockno < page->blockno)
+			chunk_blockno < ptbase[idxpages[istate->spageptr]].blockno)
 		{
 			/* Return a lossy page indicator from the chunk */
 			output->blockno = chunk_blockno;
-- 
GitLab