{"thread":{"id":"19098","subject":"[JGIT PATCH] Fix more computation of integer average overflows","startedAt":"2009-04-27T23:14:30Z","lastAt":"2009-04-27T23:14:30Z","messageCount":1,"participants":["Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"112478","messageId":"1240874070-10562-1-git-send-email-spearce@spearce.org","threadId":"19098","inReplyTo":null,"subject":"[JGIT PATCH] Fix more computation of integer average overflows","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2009-04-27T23:14:30Z","receivedAt":"2009-04-27T23:14:30Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"In 1d99aaab8e364c6ad722437e43c77fd54e13b071 Matthias Sohn pointed\nout that (low+high)/2 can overflow, so (low+high)>>>1 is a better\nchoice when the result will be used as an array index.\n\nSigned-off-by: Shawn O. Pearce <spearce@spearce.org>\n---\n\n I guess we need this too then, eh?\n\n .../src/org/spearce/jgit/lib/PackIndexV1.java      |    2 +-\n .../src/org/spearce/jgit/lib/PackIndexV2.java      |    6 +++---\n 2 files changed, 4 insertions(+), 4 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java\nindex fdaa094..0ad29e1 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV1.java\n@@ -129,7 +129,7 @@ long findOffset(final AnyObjectId objId) {\n \t\tint high = data.length / (4 + Constants.OBJECT_ID_LENGTH);\n \t\tint low = 0;\n \t\tdo {\n-\t\t\tfinal int mid = (low + high) / 2;\n+\t\t\tfinal int mid = (low + high) >>> 1;\n \t\t\tfinal int pos = ((4 + Constants.OBJECT_ID_LENGTH) * mid) + 4;\n \t\t\tfinal int cmp = objId.compareTo(data, pos);\n \t\t\tif (cmp < 0)\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java\nindex eb56ed9..b539547 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackIndexV2.java\n@@ -108,7 +108,7 @@ PackIndexV2(final InputStream fd) throws IOException {\n \n \t\t\tfinal int intNameLen = (int) nameLen;\n \t\t\tfinal byte[] raw = new byte[intNameLen];\n-\t\t\tfinal int[] bin = new int[intNameLen >> 2];\n+\t\t\tfinal int[] bin = new int[intNameLen >>> 2];\n \t\t\tNB.readFully(fd, raw, 0, raw.length);\n \t\t\tfor (int i = 0; i < bin.length; i++)\n \t\t\t\tbin[i] = NB.decodeInt32(raw, i << 2);\n@@ -212,12 +212,12 @@ boolean hasCRC32Support() {\n \n \tprivate int binarySearchLevelTwo(final AnyObjectId objId, final int levelOne) {\n \t\tfinal int[] data = names[levelOne];\n-\t\tint high = offset32[levelOne].length >> 2;\n+\t\tint high = offset32[levelOne].length >>> 2;\n \t\tif (high == 0)\n \t\t\treturn -1;\n \t\tint low = 0;\n \t\tdo {\n-\t\t\tfinal int mid = (low + high) >> 1;\n+\t\t\tfinal int mid = (low + high) >>> 1;\n \t\t\tfinal int mid4 = mid << 2;\n \t\t\tfinal int cmp;\n \n-- \n1.6.3.rc1.205.g37f8\n"}]}