diff options
author | Peter Geoghegan <pg@bowt.ie> | 2021-09-22 19:21:36 -0700 |
---|---|---|
committer | Peter Geoghegan <pg@bowt.ie> | 2021-09-22 19:21:36 -0700 |
commit | c7aeb775df895db240dcd6f47242f7e08899adfb (patch) | |
tree | f2e2e1c50c46d176623570d168d00dda18049278 /src/backend/access/heap/heapam.c | |
parent | 85c69611288f4096b7460d980bedaa777f824d24 (diff) |
Document issue with heapam line pointer truncation.
Checking that an offset number isn't past the end of a heap page's line
pointer array was just a defensive sanity check for HOT-chain traversal
code before commit 3c3b8a4b. It's etrictly necessary now, though. Add
comments that reference the issue to code in heapam that needs to get it
right.
Per suggestion from Alexander Lakhin.
Discussion: https://postgr.es/m/f76a292c-9170-1aef-91a0-59d9443b99a3@gmail.com
Diffstat (limited to 'src/backend/access/heap/heapam.c')
-rw-r--r-- | src/backend/access/heap/heapam.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 972fdbcb92f..2a264c6ac1f 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -7483,8 +7483,15 @@ heap_index_delete_tuples(Relation rel, TM_IndexDeleteOp *delstate) ItemId lp; HeapTupleHeader htup; - /* Some sanity checks */ - if (offnum < FirstOffsetNumber || offnum > maxoff) + /* Sanity check (pure paranoia) */ + if (offnum < FirstOffsetNumber) + break; + + /* + * An offset past the end of page's line pointer array is possible + * when the array was truncated + */ + if (offnum > maxoff) break; lp = PageGetItemId(page, offnum); |