summaryrefslogtreecommitdiff
path: root/builtin/pack-objects.c
diff options
context:
space:
mode:
authorDerrick Stolee <dstolee@microsoft.com>2017-10-08 14:29:37 -0400
committerJunio C Hamano <gitster@pobox.com>2017-10-10 08:57:24 +0900
commit19716b21a4255ecc7148b54ab2c78039c59f25bf (patch)
tree5f1cecbffc543c64e7c4c4f371d204424e1ce1bb /builtin/pack-objects.c
parent217f2767cbcb562872437eed4dec62e00846d90c (diff)
downloadgit-ds/avoid-overflow-in-midpoint-computation.tar.gz
cleanup: fix possible overflow errors in binary searchds/avoid-overflow-in-midpoint-computation
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>
Diffstat (limited to 'builtin/pack-objects.c')
-rw-r--r--builtin/pack-objects.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 5ee2c48ffb..6e77dfd444 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -1277,7 +1277,7 @@ static int done_pbase_path_pos(unsigned hash)
int lo = 0;
int hi = done_pbase_paths_num;
while (lo < hi) {
- int mi = (hi + lo) / 2;
+ int mi = lo + (hi - lo) / 2;
if (done_pbase_paths[mi] == hash)
return mi;
if (done_pbase_paths[mi] < hash)