]> granicus.if.org Git - icu/commitdiff
ICU-20916 UBSan & ErrorProne fixes
authorMarkus Scherer <markus.icu@gmail.com>
Fri, 20 Dec 2019 22:28:01 +0000 (14:28 -0800)
committerMarkus Scherer <markus.icu@gmail.com>
Fri, 20 Dec 2019 22:56:31 +0000 (14:56 -0800)
icu4c/source/common/lsr.cpp
icu4j/main/classes/core/src/com/ibm/icu/impl/locale/LocaleDistance.java
icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XLikelySubtags.java
icu4j/main/classes/core/src/com/ibm/icu/util/LocaleMatcher.java

index a5e10ef17670f5336c6f1a5dfd11c9fa432b9619..d4308ad02754288ecb2373f45511a5b53e1ae28a 100644 (file)
@@ -103,7 +103,7 @@ int32_t LSR::indexForRegion(const char *region) {
 
 LSR &LSR::setHashCode() {
     if (hashCode == 0) {
-        int32_t h = ustr_hashCharsN(language, static_cast<int32_t>(uprv_strlen(language)));
+        uint32_t h = ustr_hashCharsN(language, static_cast<int32_t>(uprv_strlen(language)));
         h = h * 37 + ustr_hashCharsN(script, static_cast<int32_t>(uprv_strlen(script)));
         h = h * 37 + regionIndex;
         hashCode = h * 37 + flags;
index 028cd8a2badc72e3a363a7af5b965aba5abc8f54..b5bd4dfe0964c2f7691ae2e0fee72c5557baae1f 100644 (file)
@@ -173,7 +173,7 @@ public class LocaleDistance {
         @Override
         public boolean equals(Object other) {
             if (this == other) { return true; }
-            if (!getClass().equals(other.getClass())) { return false; }
+            if (other == null || !getClass().equals(other.getClass())) { return false; }
             Data od = (Data)other;
             return Arrays.equals(trie, od.trie) &&
                     Arrays.equals(regionToPartitionsIndex, od.regionToPartitionsIndex) &&
@@ -181,6 +181,11 @@ public class LocaleDistance {
                     paradigmLSRs.equals(od.paradigmLSRs) &&
                     Arrays.equals(distances, od.distances);
         }
+
+        @Override
+        public int hashCode() {  // unused; silence ErrorProne
+            return 1;
+        }
     }
 
     // VisibleForTesting
index 1938170e74ea4a4daf0a6e79c7bbbe9c12fc4691..543aadef159bf246b467d59a5cdab698e778a912 100644 (file)
@@ -97,7 +97,7 @@ public final class XLikelySubtags {
         @Override
         public boolean equals(Object other) {
             if (this == other) { return true; }
-            if (!getClass().equals(other.getClass())) { return false; }
+            if (other == null || !getClass().equals(other.getClass())) { return false; }
             Data od = (Data)other;
             return
                     languageAliases.equals(od.languageAliases) &&
@@ -105,6 +105,11 @@ public final class XLikelySubtags {
                     Arrays.equals(trie, od.trie) &&
                     Arrays.equals(lsrs, od.lsrs);
         }
+
+        @Override
+        public int hashCode() {  // unused; silence ErrorProne
+            return 1;
+        }
     }
 
     // VisibleForTesting
index a333355c4c04ab1644899db089d82ff39328c90a..f424679cbdb3c26c8502b3a1dc714c0bb85bdea1 100644 (file)
@@ -15,7 +15,6 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Objects;
 
 import com.ibm.icu.impl.locale.LSR;
 import com.ibm.icu.impl.locale.LocaleDistance;
@@ -522,19 +521,19 @@ public final class LocaleMatcher {
         public String toString() {
             StringBuilder s = new StringBuilder().append("{LocaleMatcher.Builder");
             if (supportedLocales != null && !supportedLocales.isEmpty()) {
-                s.append(" supported={").append(supportedLocales.toString()).append('}');
+                s.append(" supported={").append(supportedLocales).append('}');
             }
             if (defaultLocale != null) {
-                s.append(" default=").append(defaultLocale.toString());
+                s.append(" default=").append(defaultLocale);
             }
             if (favor != null) {
-                s.append(" distance=").append(favor.toString());
+                s.append(" distance=").append(favor);
             }
             if (thresholdDistance >= 0) {
                 s.append(String.format(" threshold=%d", thresholdDistance));
             }
             if (demotion != null) {
-                s.append(" demotion=").append(demotion.toString());
+                s.append(" demotion=").append(demotion);
             }
             return s.append('}').toString();
         }
@@ -1018,7 +1017,7 @@ public final class LocaleMatcher {
         double distance = LocaleDistance.getDistanceDouble(indexAndDistance);
         if (TRACE_MATCHER) {
             System.err.printf("LocaleMatcher distance(desired=%s, supported=%s)=%g\n",
-                Objects.toString(desired), Objects.toString(supported), distance);
+                String.valueOf(desired), String.valueOf(supported), distance);
         }
         return (100.0 - distance) / 100.0;
     }
@@ -1050,15 +1049,15 @@ public final class LocaleMatcher {
         StringBuilder s = new StringBuilder().append("{LocaleMatcher");
         // Supported languages in the order that we try to match them.
         if (supportedLSRs.length > 0) {
-            s.append(" supportedLSRs={").append(supportedLSRs[0].toString());
+            s.append(" supportedLSRs={").append(supportedLSRs[0]);
             for (int i = 1; i < supportedLSRs.length; ++i) {
-                s.append(", ").append(supportedLSRs[i].toString());
+                s.append(", ").append(supportedLSRs[i]);
             }
             s.append('}');
         }
-        s.append(" default=").append(Objects.toString(defaultULocale));
+        s.append(" default=").append(defaultULocale);
         if (favorSubtag != null) {
-            s.append(" favor=").append(favorSubtag.toString());
+            s.append(" favor=").append(favorSubtag);
         }
         if (thresholdDistance >= 0) {
             s.append(String.format(" threshold=%d", thresholdDistance));