Thread

  1. Re: Fix incorrect assertion in heapgettup_pagemode()

    Chao Li <li.evan.chao@gmail.com> — 2025-12-25T13:34:06Z

    
    > On Dec 25, 2025, at 19:13, cca5507 <cca5507@qq.com> wrote:
    > 
    > Hi,
    > 
    > diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
    > index 469397e7344..1229e22e78a 100644
    > --- a/src/backend/access/heap/heapam.c
    > +++ b/src/backend/access/heap/heapam.c
    > @@ -1077,7 +1077,7 @@ continue_page:
    >                        ItemId          lpp;
    >                        OffsetNumber lineoff;
    > 
    > -                       Assert(lineindex <= scan->rs_ntuples);
    > +                       Assert(lineindex < scan->rs_ntuples);
    >                        lineoff = scan->rs_vistuples[lineindex];
    >                        lpp = PageGetItemId(page, lineoff);
    >                        Assert(ItemIdIsNormal(lpp));
    > 
    > The lineindex is 0-based, so it should be '<' rather than '<=', thoughts?
    > 
    > --
    > Regards,
    > ChangAo Chen
    > <v1-0001-Fix-incorrect-assertion-in-heapgettup_pagemode.patch>
    
    Good catch. The function comment clearly mentions that lineindex is 0 based.
    ```
     * tuples listed in rs_vistuples[] rather than all tuples on the page. Notice
    * that lineindex is 0-based, where the corresponding loop variable lineoff in
    * heapgettup is 1-based.
    * ----------------
    */
    static void
    heapgettup_pagemode(HeapScanDesc scan,
      ScanDirection dir,
      int nkeys,
      ScanKey key)
    {
      HeapTuple tuple = &(scan->rs_ctup);
      Page page;
      uint32 lineindex;
      uint32 linesleft;
    ```
    
    So, the fix looks correct.
    
    
    Best regards,
    --
    Chao Li (Evan)
    HighGo Software Co., Ltd.
    https://www.highgo.com/