Handle numeric overflow when handling range values The numrange_subdiff() function was calculating the difference simply by calling numeric_sub and numeric_float8, but those functions are not overflow-safe. It's possible to insert valid numeric ranges for which the difference overflows either numeric or float8.
The overflow may affect various operations on numrange columns. It may cause failures during ANALYZE on the table, inserts into GiST indexes, selectivity estimation, and possibly other operations. Fixed by handling overflows in numrange_subdiff() - extreme differences are treated as infinity. Author: Kirill Reshke <[email protected]> Reviewed-by: shihao zhong <[email protected]> Backpatch-through: 14 Discussion: https://postgr.es/m/CALdSSPgBvXz-VSF0p-5k%3D_uFfN38cWrERmm_AC4K67N6MWQhmg%40mail.gmail.com Branch ------ REL_18_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/8a043da94728821e1dfc6758cd883bafb57bfac7 Modified Files -------------- src/backend/utils/adt/rangetypes.c | 37 ++++++++++++++++++++++----- src/test/regress/expected/multirangetypes.out | 7 +++++ src/test/regress/sql/multirangetypes.sql | 9 +++++++ 3 files changed, 46 insertions(+), 7 deletions(-)
