]> granicus.if.org Git - postgresql/commit
Avoid integer overflow while sifting-up a heap in tuplesort.c.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 12 Jul 2017 17:24:16 +0000 (13:24 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 12 Jul 2017 17:24:16 +0000 (13:24 -0400)
commit09c5988981668257705fb7a4f32f252876878f2d
treef04de70bd240bd65d2f90ae434d434eba8feca1f
parent0a2d07cf1ed8bd1d16991fdda5c955903d30d8c8
Avoid integer overflow while sifting-up a heap in tuplesort.c.

If the number of tuples in the heap exceeds approximately INT_MAX/2,
this loop's calculation "2*i+1" could overflow, resulting in a crash.
Fix it by using unsigned int rather than int for the relevant local
variables; that shouldn't cost anything extra on any popular hardware.
Per bug #14722 from Sergey Koposov.

Original patch by Sergey Koposov, modified by me per a suggestion
from Heikki Linnakangas to use unsigned int not int64.

Back-patch to 9.4, where tuplesort.c grew the ability to sort as many
as INT_MAX tuples in-memory (commit 263865a48).

Discussion: https://postgr.es/m/20170629161637.1478.93109@wrigleys.postgresql.org
src/backend/utils/sort/tuplesort.c