pgsql: Fix selectivity estimation integer overflow in contrib/intarray - Mailing list pgsql-committers

From David Rowley
Subject pgsql: Fix selectivity estimation integer overflow in contrib/intarray
Date
Msg-id E1vcIdg-004OTH-1W@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix selectivity estimation integer overflow in contrib/intarray

This fixes a poorly written integer comparison function which was
performing subtraction in an attempt to return a negative value when
a < b and a positive value when a > b, and 0 when the values were equal.
Unfortunately that didn't always work correctly due to two's complement
having the INT_MIN 1 further from zero than INT_MAX.  This could result
in an overflow and cause the comparison function to return an incorrect
result, which would result in the binary search failing to find the
value being searched for.

This could cause poor selectivity estimates when the statistics stored
the value of INT_MAX (2147483647) and the value being searched for was
large enough to result in the binary search doing a comparison with that
INT_MAX value.

Author: Chao Li <li.evan.chao@gmail.com>
Reviewed-by: David Rowley <dgrowleyml@gmail.com>
Discussion: https://postgr.es/m/CAEoWx2ng1Ot5LoKbVU-Dh---dFTUZWJRH8wv2chBu29fnNDMaQ@mail.gmail.com
Backpatch-through: 14

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/67a6fd5074812af4af93a08f823a0885584fd6f1

Modified Files
--------------
contrib/intarray/_int_selfuncs.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)


pgsql-committers by date:

Previous
From: David Rowley
Date:
Subject: pgsql: Fix selectivity estimation integer overflow in contrib/intarray
Next
From: David Rowley
Date:
Subject: pgsql: Doc: add missing punctuation