From cf8942d59d0429ee7ec498a3e6307d6a4d796230 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Wed, 29 Apr 2009 11:54:38 -0700 Subject: [PATCH] Fix more computation of integer average overflows In 1d99aaab8e364c6ad722437e43c77fd54e13b071 Matthias Sohn pointed out that (low+high)/2 can overflow, so (low+high)>>>1 is a better choice when the result will be used as an array index. Signed-off-by: Shawn O. Pearce Signed-off-by: Robin Rosenberg --- org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java | 2 +- org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java index fdaa0943..0ad29e1a 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java @@ -129,7 +129,7 @@ class PackIndexV1 extends PackIndex { int high = data.length / (4 + Constants.OBJECT_ID_LENGTH); int low = 0; do { - final int mid = (low + high) / 2; + final int mid = (low + high) >>> 1; final int pos = ((4 + Constants.OBJECT_ID_LENGTH) * mid) + 4; final int cmp = objId.compareTo(data, pos); if (cmp < 0) diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java index eb56ed94..b5395477 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java @@ -108,7 +108,7 @@ class PackIndexV2 extends PackIndex { final int intNameLen = (int) nameLen; final byte[] raw = new byte[intNameLen]; - final int[] bin = new int[intNameLen >> 2]; + final int[] bin = new int[intNameLen >>> 2]; NB.readFully(fd, raw, 0, raw.length); for (int i = 0; i < bin.length; i++) bin[i] = NB.decodeInt32(raw, i << 2); @@ -212,12 +212,12 @@ class PackIndexV2 extends PackIndex { private int binarySearchLevelTwo(final AnyObjectId objId, final int levelOne) { final int[] data = names[levelOne]; - int high = offset32[levelOne].length >> 2; + int high = offset32[levelOne].length >>> 2; if (high == 0) return -1; int low = 0; do { - final int mid = (low + high) >> 1; + final int mid = (low + high) >>> 1; final int mid4 = mid << 2; final int cmp; -- 2.11.4.GIT