Skip to content

Commit

Permalink
postgres: add additional checks in pg_heap
Browse files Browse the repository at this point in the history
  • Loading branch information
Pavel Safonov committed Oct 24, 2022
1 parent 8f55e17 commit 5ff6273
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions format/postgres/common/pg_heap/postgres/pg_heap.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ func Decode(heap *Heap, d *decode.D) any {

func decodeHeapPages(heap *Heap, d *decode.D) {
blockNumber := uint32(heap.Args.PageNumber + heap.Args.SegmentNumber*common.RelSegSize)
count := int64(0)
for {
if end, _ := d.TryEnd(); end {
return
Expand All @@ -154,11 +155,16 @@ func decodeHeapPages(heap *Heap, d *decode.D) {
decodeHeapPage(heap, d, blockNumber)
})
blockNumber++
count++

// end of Page
endLen := uint64(d.Pos() / 8)
pageEnd := common.TypeAlign(common.PageSize, endLen)
d.SeekAbs(int64(pageEnd) * 8)
pageEnd := int64(common.TypeAlign(common.PageSize, endLen))
pageEnd0 := count * common.PageSize
if pageEnd0 != pageEnd {
fmt.Printf("invalid page %d end expected %d, actual %d, endLen %d\n", count-1, pageEnd0, pageEnd, endLen)
}
d.SeekAbs(pageEnd0 * 8)
}
}

Expand Down Expand Up @@ -219,6 +225,9 @@ func decodeTuples(heap *Heap, d *decode.D) {
}

pos := (page.BytesPosBegin * 8) + int64(id.Off)*8
if id.Len < SizeOfHeapTupleHeaderData {
d.Fatalf("item len = %d, is less than %d HeapTupleHeaderData\n", id.Len, SizeOfHeapTupleHeaderData)
}
tupleDataLen := id.Len - SizeOfHeapTupleHeaderData

// seek to tuple with ItemID offset
Expand Down

0 comments on commit 5ff6273

Please sign in to comment.