pgsql: Fix checking of index expressions in CompareIndexInfo().

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix checking of index expressions in CompareIndexInfo().
Date: 2023-09-28 18:05:37
Message-ID: E1qlvOL-006VAP-PT@gemulon.postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix checking of index expressions in CompareIndexInfo().

This code was sloppy about comparison of index columns that
are expressions. It didn't reliably reject cases where one
index has an expression where the other has a plain column,
and it could index off the start of the attmap array, leading
to a Valgrind complaint (though an actual crash seems unlikely).

I'm not sure that the expression-vs-column sloppiness leads
to any visible problem in practice, because the subsequent
comparison of the two expression lists would reject cases
where the indexes have different numbers of expressions
overall. Maybe we could falsely match indexes having the
same expressions in different column positions, but it'd
require unlucky contents of the word before the attmap array.
It's not too surprising that no problem has been reported
from the field. Nonetheless, this code is clearly wrong.

Per bug #18135 from Alexander Lakhin. Back-patch to all
supported branches.

Discussion: https://postgr.es/m/18135-532f4a755e71e4d2@postgresql.org

Branch
------
REL_16_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/12402b93117be733985418c6fdeda5f09877469e

Modified Files
--------------
src/backend/catalog/index.c | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Geoghegan 2023-09-28 23:30:00 pgsql: Fix btmarkpos/btrestrpos array key wraparound bug.
Previous Message Robert Haas 2023-09-28 15:24:29 pgsql: Return data from heap_page_prune via a struct.