Skip to content

Commit fa41cf8

Browse files
Avoid misinterpreting GiST pages in pageinspect.
GistPageSetDeleted() sets pd_lower when deleting a page, and sets the page contents to a GISTDeletedPageContents. Avoid treating deleted GiST pages as regular slotted pages within pageinspect. Oversight in commit 756ab29. Author: Andrey Borodin <x4mmm@yandex-team.ru>
1 parent 7cde6b1 commit fa41cf8

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

contrib/pageinspect/gistfuncs.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ gist_page_items_bytea(PG_FUNCTION_ARGS)
103103
MemoryContext oldcontext;
104104
Page page;
105105
OffsetNumber offset;
106+
OffsetNumber maxoff = InvalidOffsetNumber;
106107

107108
if (!superuser())
108109
ereport(ERROR,
@@ -135,11 +136,14 @@ gist_page_items_bytea(PG_FUNCTION_ARGS)
135136

136137
page = get_page_from_raw(raw_page);
137138

139+
/* Avoid bogus PageGetMaxOffsetNumber() call with deleted pages */
138140
if (GistPageIsDeleted(page))
139141
elog(NOTICE, "page is deleted");
142+
else
143+
maxoff = PageGetMaxOffsetNumber(page);
140144

141145
for (offset = FirstOffsetNumber;
142-
offset <= PageGetMaxOffsetNumber(page);
146+
offset <= maxoff;
143147
offset++)
144148
{
145149
Datum values[4];
@@ -187,6 +191,7 @@ gist_page_items(PG_FUNCTION_ARGS)
187191
MemoryContext oldcontext;
188192
Page page;
189193
OffsetNumber offset;
194+
OffsetNumber maxoff = InvalidOffsetNumber;
190195

191196
if (!superuser())
192197
ereport(ERROR,
@@ -222,11 +227,14 @@ gist_page_items(PG_FUNCTION_ARGS)
222227

223228
page = get_page_from_raw(raw_page);
224229

230+
/* Avoid bogus PageGetMaxOffsetNumber() call with deleted pages */
225231
if (GistPageIsDeleted(page))
226232
elog(NOTICE, "page is deleted");
233+
else
234+
maxoff = PageGetMaxOffsetNumber(page);
227235

228236
for (offset = FirstOffsetNumber;
229-
offset <= PageGetMaxOffsetNumber(page);
237+
offset <= maxoff;
230238
offset++)
231239
{
232240
Datum values[4];

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy