summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2025-10-23 12:32:06 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2025-10-23 12:32:06 -0400
commit9f9a04368f8055c1851f5071add393b380d1cc52 (patch)
treebaee97df7fac1af7bf4c64065878ad3db013865e /src
parent798b19d27b28e6dec3ae5134d396882d3197dfe8 (diff)
Fix off-by-one Asserts in FreePageBtreeInsertInternal/Leaf.
These two functions expect there to be room to insert another item in the FreePageBtree's array, but their assertions were too weak to guarantee that. This has little practical effect granting that the callers are not buggy, but it seems to be misleading late-model Coverity into complaining about possible array overrun. Author: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/799984.1761150474@sss.pgh.pa.us Backpatch-through: 13
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/mmgr/freepage.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/backend/utils/mmgr/freepage.c b/src/backend/utils/mmgr/freepage.c
index 52fa78dc586..27d3e6e100c 100644
--- a/src/backend/utils/mmgr/freepage.c
+++ b/src/backend/utils/mmgr/freepage.c
@@ -894,14 +894,14 @@ FreePageBtreeGetRecycled(FreePageManager *fpm)
}
/*
- * Insert an item into an internal page.
+ * Insert an item into an internal page (there must be room).
*/
static void
FreePageBtreeInsertInternal(char *base, FreePageBtree *btp, Size index,
Size first_page, FreePageBtree *child)
{
Assert(btp->hdr.magic == FREE_PAGE_INTERNAL_MAGIC);
- Assert(btp->hdr.nused <= FPM_ITEMS_PER_INTERNAL_PAGE);
+ Assert(btp->hdr.nused < FPM_ITEMS_PER_INTERNAL_PAGE);
Assert(index <= btp->hdr.nused);
memmove(&btp->u.internal_key[index + 1], &btp->u.internal_key[index],
sizeof(FreePageBtreeInternalKey) * (btp->hdr.nused - index));
@@ -911,14 +911,14 @@ FreePageBtreeInsertInternal(char *base, FreePageBtree *btp, Size index,
}
/*
- * Insert an item into a leaf page.
+ * Insert an item into a leaf page (there must be room).
*/
static void
FreePageBtreeInsertLeaf(FreePageBtree *btp, Size index, Size first_page,
Size npages)
{
Assert(btp->hdr.magic == FREE_PAGE_LEAF_MAGIC);
- Assert(btp->hdr.nused <= FPM_ITEMS_PER_LEAF_PAGE);
+ Assert(btp->hdr.nused < FPM_ITEMS_PER_LEAF_PAGE);
Assert(index <= btp->hdr.nused);
memmove(&btp->u.leaf_key[index + 1], &btp->u.leaf_key[index],
sizeof(FreePageBtreeLeafKey) * (btp->hdr.nused - index));