mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-04-19 10:15:48 +02:00
sort: fix bug on 64-bit hosts with at least 32768 processors
* src/sort.c (MAX_MERGE): Avoid integer overflow when on a machine with (say) 32-bit int and 64-bit size_t and when level == 15. Without this fix, on such a machine with 32768 or more processors, the level computation could overflow on large input, and this would result in division by zero.
This commit is contained in:
@@ -107,7 +107,7 @@ struct rlimit { size_t rlim_cur; };
|
||||
/* Maximum number of lines to merge every time a NODE is taken from
|
||||
the MERGE_QUEUE. Node is at LEVEL in the binary merge tree,
|
||||
and is responsible for merging TOTAL lines. */
|
||||
#define MAX_MERGE(total, level) ((total) / ((2 << level) * (2 << level)) + 1)
|
||||
#define MAX_MERGE(total, level) (((total) >> (2 * ((level) + 1))) + 1)
|
||||
|
||||
/* Heuristic value for the number of lines for which it is worth
|
||||
creating a subthread, during an internal merge sort, on a machine
|
||||
|
||||
Reference in New Issue
Block a user