cleanup: fix possible overflow errors in binary search
A common mistake when writing binary search is to allow possible integer overflow by using the simple average: mid = (min + max) / 2; Instead, use the overflow-safe version: mid = min + (max - min) / 2; This translation is safe since the operation occurs inside a loop conditioned on "min < max". The included changes were found using the following git grep: git grep '/ *2;' '*.c' Making this cleanup will prevent future review friction when a new binary search is contructed based on existing code. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
217f2767cb
commit
19716b21a4
@ -633,7 +633,7 @@ static int find_ofs_delta(const off_t offset, enum object_type type)
|
||||
int first = 0, last = nr_ofs_deltas;
|
||||
|
||||
while (first < last) {
|
||||
int next = (first + last) / 2;
|
||||
int next = first + (last - first) / 2;
|
||||
struct ofs_delta_entry *delta = &ofs_deltas[next];
|
||||
int cmp;
|
||||
|
||||
@ -687,7 +687,7 @@ static int find_ref_delta(const unsigned char *sha1, enum object_type type)
|
||||
int first = 0, last = nr_ref_deltas;
|
||||
|
||||
while (first < last) {
|
||||
int next = (first + last) / 2;
|
||||
int next = first + (last - first) / 2;
|
||||
struct ref_delta_entry *delta = &ref_deltas[next];
|
||||
int cmp;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user