From: Abhinav Gupta Date: Wed, 28 Sep 2011 20:29:59 +0000 (+0000) Subject: ICU-8268 computation of average could overflow. X-Git-Tag: milestone-59-0-1~4476 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=691627139637ef334d01d6f308c670e7c65d2bdc;p=icu ICU-8268 computation of average could overflow. The (a+b)/2 or (a+b)>>1 could cause an overflow. Use unsigned bit shift (>>>). X-SVN-Rev: 30735 --- diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/BMPSet.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/BMPSet.java index 7cb471c9a2a..cbb39eac444 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/BMPSet.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/BMPSet.java @@ -1,7 +1,7 @@ /* ****************************************************************************** * - * Copyright (C) 2009-2010, International Business Machines + * Copyright (C) 2009-2011, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -481,7 +481,7 @@ public final class BMPSet { // invariant: c >= list[lo] // invariant: c < list[hi] for (;;) { - int i = (lo + hi) >> 1; + int i = (lo + hi) >>> 1; if (i == lo) { break; // Found! } else if (c < list[i]) { diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/ICUResourceBundleReader.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/ICUResourceBundleReader.java index b230776c35d..2341f55dda6 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/impl/ICUResourceBundleReader.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/ICUResourceBundleReader.java @@ -860,7 +860,7 @@ public final class ICUResourceBundleReader implements ICUBinary.Authenticate { start=0; limit=size; while(start>> 1; if (keyOffsets != null) { result = reader.compareKeys(key, keyOffsets[mid]); } else { diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/BidiLine.java b/icu4j/main/classes/core/src/com/ibm/icu/text/BidiLine.java index 6fd88a9845e..fdf8cc90f3c 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/BidiLine.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/BidiLine.java @@ -1,6 +1,6 @@ /* ******************************************************************************* -* Copyright (C) 2001-2009, International Business Machines +* Copyright (C) 2001-2011, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* */ @@ -984,7 +984,7 @@ final class BidiLine { /* the middle if() is guaranteed to find the run, we don't need a loop limit */ for ( ; ; ) { - i = (begin + limit) / 2; + i = (begin + limit) >>> 1; if (visualIndex >= runs[i].limit) { begin = i + 1; } else if (i==0 || visualIndex >= runs[i-1].limit) { diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/BreakCTDictionary.java b/icu4j/main/classes/core/src/com/ibm/icu/text/BreakCTDictionary.java index 2ff5a257639..e033881f949 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/BreakCTDictionary.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/BreakCTDictionary.java @@ -1,6 +1,6 @@ /* ******************************************************************************* - * Copyright (C) 1996-2010, International Business Machines Corporation and * + * Copyright (C) 1996-2011, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ @@ -228,7 +228,7 @@ class BreakCTDictionary { int middle; node = null; // If we don't find a match, we'll fall out of the loop while (high >= low) { - middle = (high + low) / 2; + middle = (high + low) >>> 1; if (uc == hnode[middle].ch) { // We hit a match; get the next node and next character node = getCompactTrieNode(hnode[middle].equal); diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/NFRuleSet.java b/icu4j/main/classes/core/src/com/ibm/icu/text/NFRuleSet.java index c8ca526e3ee..52b282144a0 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/NFRuleSet.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/NFRuleSet.java @@ -529,7 +529,7 @@ final class NFRuleSet { int hi = rules.length; if (hi > 0) { while (lo < hi) { - int mid = (lo + hi) / 2; + int mid = (lo + hi) >>> 1; if (rules[mid].getBaseValue() == number) { return rules[mid]; }