Em seg., 12 de jul. de 2021 às 05:20, Heikki Linnakangas <hlinn...@iki.fi>
escreveu:

> On 12/07/2021 02:34, Ranier Vilela wrote:
> > If it is not possible, know the upper limits, before the loop.
> > It is necessary to do this inside the loop.
>
> > @@ -49,10 +47,14 @@ _bt_restore_page(Page page, char *from, int len)
> >        * To get the items back in the original order, we add them to the
> page in
> >        * reverse.  To figure out where one tuple ends and another
> begins, we
> >        * have to scan them in forward order first.
> > +      * Check the array upper limit to not overtake him.
> >        */
> >       i = 0;
> > -     while (from < end)
> > +     while (from < end && i <= MaxIndexTuplesPerPage)
> >       {
> > +             IndexTupleData itupdata;
> > +             Size            itemsz;
> > +
> >               /*
> >                * As we step through the items, 'from' won't always be
> properly
> >                * aligned, so we need to use memcpy().  Further, we use
> Item (which
>
> If we bother checking it, we should throw an error if the check fails,
> not just silently soldier on. Also, shouldn't it be '<', not '<='?

Should be '<', you are right.

In
> general though, we don't do much checking on WAL records, we assume that
> the contents are sane. It would be nice to add more checks and make WAL
> redo routines more robust to corrupt records, but this seems like an odd
> place to start.
>
If WAL records can't be corrupted at _bt_restore_page, that's ok, it's safe.


> I committed the removal of bogus assignment to 'from'. Thanks!
>
Thanks for the commit.

regards,
Ranier Vilela

Reply via email to