Re: Fw: Re: heap_force_common in contrib/pg_surgery/heap_surgery.c has an off by one stack buffer overflow
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: surya poondla <suryapoondla4@gmail.com>
Cc: "violin0613@tju.edu.cn" <violin0613@tju.edu.cn>, pgsql-bugs@postgresql.org
Date: 2026-06-04T07:31:20Z
Lists: pgsql-bugs
On Wed, Jun 03, 2026 at 03:31:27PM -0700, surya poondla wrote: > Thank you for reporting the issue, I am able to reproduce it on master. > The include_this_tid[] array is sized MaxHeapTuplesPerPage but indexed > using 1-based OffsetNumber, > so the largest legal offset (MaxHeapTuplesPerPage itself) lands one slot > past the end. - bool include_this_tid[MaxHeapTuplesPerPage]; + /* Sized +1 because OffsetNumbers are 1-based and can reach MaxHeapTuplesPerPage. */ + bool include_this_tid[MaxHeapTuplesPerPage + 1]; The offset number begins at 1. Hence, instead of making this array larger by one, you could keep it at the same size and adjust the array index to use (offno - 1) instead. -- Michael
Commits
-
pg_surgery: Fix off-by-one bug with heap offset
- 1eda3eb0753a 14 (unreleased) landed
- 51f63ba2bf7f 15 (unreleased) landed
- daf8bc7d41ac 16 (unreleased) landed
- 0bcf19c9e8fc 17 (unreleased) landed
- 2b09f8a9110a 18 (unreleased) landed
- 193a4ded9474 19 (unreleased) landed