Skip to content

Commit 15ea57c

Browse files
author
Artur Zakirov
committed
Fix possible subtraction overflow
1 parent 88b6bc4 commit 15ea57c

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

rumdatapage.c

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -732,7 +732,8 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
732732
*/
733733
findInLeafPage(btree, page, &off, &iptr, &ptr);
734734

735-
Assert(RumDataPageFreeSpacePre(page,ptr) >= 0);
735+
freespace = RumDataPageFreeSpacePre(page,ptr);
736+
Assert(freespace >= 0);
736737

737738
if (off <= maxoff)
738739
{
@@ -768,7 +769,8 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
768769
ptr = rumPlaceToDataPageLeaf(ptr, btree->entryAttnum,
769770
&btree->items[j], btree->addInfo[j], btree->addInfoIsNull[j],
770771
&iptr, btree->rumstate);
771-
Assert(RumDataPageFreeSpacePre(page,ptr) >= 0);
772+
freespace = RumDataPageFreeSpacePre(page,ptr);
773+
Assert(freespace >= 0);
772774

773775
iptr = btree->items[j];
774776
btree->curitem++;
@@ -785,7 +787,10 @@ dataPlaceToPage(RumBtree btree, Page page, OffsetNumber off)
785787
ptr = rumPlaceToDataPageLeaf(ptr, btree->entryAttnum,
786788
&copy_iptr, addInfo, addInfoIsNull,
787789
&iptr, btree->rumstate);
788-
Assert(RumDataPageFreeSpacePre(page,ptr) >= 0);
790+
791+
freespace = RumDataPageFreeSpacePre(page,ptr);
792+
Assert(freespace >= 0);
793+
789794
iptr = copy_iptr;
790795
}
791796
}
@@ -851,6 +856,7 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
851856
ItemPointerData iptr, prevIptr, maxLeftIptr;
852857
int totalCount = 0;
853858
int maxItemIndex = btree->curitem;
859+
int freespace;
854860

855861
static char lpageCopy[BLCKSZ];
856862

@@ -970,7 +976,8 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
970976
btree->addInfo[btree->curitem],
971977
btree->addInfoIsNull[btree->curitem],
972978
&prevIptr, btree->rumstate);
973-
Assert(RumDataPageFreeSpacePre(page, ptr) >= 0);
979+
freespace = RumDataPageFreeSpacePre(page, ptr);
980+
Assert(freespace >= 0);
974981

975982
prevIptr = btree->items[btree->curitem];
976983
btree->curitem++;
@@ -984,7 +991,8 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
984991

985992
ptr = rumPlaceToDataPageLeaf(ptr, btree->entryAttnum, &iptr,
986993
addInfo, addInfoIsNull, &prevIptr, btree->rumstate);
987-
Assert(RumDataPageFreeSpacePre(page, ptr) >= 0);
994+
freespace = RumDataPageFreeSpacePre(page, ptr);
995+
Assert(freespace >= 0);
988996

989997
prevIptr = iptr;
990998

@@ -1000,7 +1008,8 @@ dataSplitPageLeaf(RumBtree btree, Buffer lbuf, Buffer rbuf,
10001008
btree->addInfo[btree->curitem],
10011009
btree->addInfoIsNull[btree->curitem],
10021010
&prevIptr, btree->rumstate);
1003-
Assert(RumDataPageFreeSpacePre(page, ptr) >= 0);
1011+
freespace = RumDataPageFreeSpacePre(page, ptr);
1012+
Assert(freespace >= 0);
10041013

10051014
prevIptr = btree->items[btree->curitem];
10061015
btree->curitem++;

ruminsert.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ createPostingTree(RumState *rumstate, OffsetNumber attnum, Relation index,
4444
BlockNumber blkno;
4545
Buffer buffer = RumNewBuffer(index);
4646
Page page;
47-
int i;
47+
int i,
48+
freespace;
4849
Pointer ptr;
4950
ItemPointerData prev_iptr = {{0,0},0};
5051
GenericXLogState *state;
@@ -65,7 +66,8 @@ createPostingTree(RumState *rumstate, OffsetNumber attnum, Relation index,
6566
ptr = rumPlaceToDataPageLeaf(ptr, attnum, &items[i], addInfo[i],
6667
addInfoIsNull[i], &prev_iptr, rumstate);
6768
}
68-
Assert(RumDataPageFreeSpacePre(page, ptr) >= 0);
69+
freespace = RumDataPageFreeSpacePre(page, ptr);
70+
Assert(freespace >= 0);
6971
updateItemIndexes(page, attnum, rumstate);
7072

7173
GenericXLogFinish(state);

0 commit comments

Comments
 (0)