aboutsummaryrefslogtreecommitdiff
path: root/contrib/pageinspect/gistfuncs.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/pageinspect/gistfuncs.c')
-rw-r--r--contrib/pageinspect/gistfuncs.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/contrib/pageinspect/gistfuncs.c b/contrib/pageinspect/gistfuncs.c
index d5da1ea839a..66a7f5562f2 100644
--- a/contrib/pageinspect/gistfuncs.c
+++ b/contrib/pageinspect/gistfuncs.c
@@ -103,6 +103,7 @@ gist_page_items_bytea(PG_FUNCTION_ARGS)
MemoryContext oldcontext;
Page page;
OffsetNumber offset;
+ OffsetNumber maxoff = InvalidOffsetNumber;
if (!superuser())
ereport(ERROR,
@@ -135,11 +136,14 @@ gist_page_items_bytea(PG_FUNCTION_ARGS)
page = get_page_from_raw(raw_page);
+ /* Avoid bogus PageGetMaxOffsetNumber() call with deleted pages */
if (GistPageIsDeleted(page))
elog(NOTICE, "page is deleted");
+ else
+ maxoff = PageGetMaxOffsetNumber(page);
for (offset = FirstOffsetNumber;
- offset <= PageGetMaxOffsetNumber(page);
+ offset <= maxoff;
offset++)
{
Datum values[4];
@@ -187,6 +191,7 @@ gist_page_items(PG_FUNCTION_ARGS)
MemoryContext oldcontext;
Page page;
OffsetNumber offset;
+ OffsetNumber maxoff = InvalidOffsetNumber;
if (!superuser())
ereport(ERROR,
@@ -222,11 +227,14 @@ gist_page_items(PG_FUNCTION_ARGS)
page = get_page_from_raw(raw_page);
+ /* Avoid bogus PageGetMaxOffsetNumber() call with deleted pages */
if (GistPageIsDeleted(page))
elog(NOTICE, "page is deleted");
+ else
+ maxoff = PageGetMaxOffsetNumber(page);
for (offset = FirstOffsetNumber;
- offset <= PageGetMaxOffsetNumber(page);
+ offset <= maxoff;
offset++)
{
Datum values[4];