]> granicus.if.org Git - icu/commitdiff
ICU-13177 Fixing coverity issues in number formatting code.
authorShane Carr <shane@unicode.org>
Wed, 4 Oct 2017 22:28:09 +0000 (22:28 +0000)
committerShane Carr <shane@unicode.org>
Wed, 4 Oct 2017 22:28:09 +0000 (22:28 +0000)
X-SVN-Rev: 40553

icu4j/main/classes/core/src/com/ibm/icu/impl/number/CustomSymbolCurrency.java
icu4j/main/classes/core/src/com/ibm/icu/impl/number/DecimalQuantity_DualStorageBCD.java
icu4j/main/classes/core/src/com/ibm/icu/number/CompactNotation.java
icu4j/main/classes/core/src/com/ibm/icu/number/FormattedNumber.java
icu4j/main/classes/core/src/com/ibm/icu/text/DecimalFormatSymbols.java

index 6610f76a5acfdd6be6e1688ed3121feca7f82b0b..e8549096eeaef3c2ebd6abeb0679e5d1f6e5d6f1 100644 (file)
@@ -8,6 +8,7 @@ import com.ibm.icu.util.ULocale;
 
 public class CustomSymbolCurrency extends Currency {
   private static final long serialVersionUID = 2497493016770137670L;
+  // TODO: Serialization methods?
 
   private String symbol1;
   private String symbol2;
@@ -60,4 +61,16 @@ public class CustomSymbolCurrency extends Currency {
   public String getCurrencyCode() {
     return symbol2;
   }
+
+  @Override
+  public int hashCode() {
+    return super.hashCode() ^ symbol1.hashCode() ^ symbol2.hashCode();
+  }
+
+  @Override
+  public boolean equals(Object other) {
+    return super.equals(other)
+            && ((CustomSymbolCurrency)other).symbol1.equals(symbol1)
+            && ((CustomSymbolCurrency)other).symbol2.equals(symbol2);
+  }
 }
index e127d6fa4c7818437f2f07ab395760d2ec2ef4b2..2ea374b6b50a4484c60e1388a3b9352fe6515701 100644 (file)
@@ -31,6 +31,7 @@ public final class DecimalQuantity_DualStorageBCD extends DecimalQuantity_Abstra
 
   public DecimalQuantity_DualStorageBCD() {
     setBcdToZero();
+    flags = 0;
   }
 
   public DecimalQuantity_DualStorageBCD(long input) {
index 320878ff26cc68886c27fe840554e7714d3d5507..f9a383525ee117c8875c7d21e586e7d8e30b7acf 100644 (file)
@@ -120,7 +120,7 @@ public class CompactNotation extends Notation {
 
             StandardPlural plural = quantity.getStandardPlural(rules);
             String patternString = data.getPattern(magnitude, plural);
-            @SuppressWarnings("unused") // see #13177
+            @SuppressWarnings("unused") // see #13075
             int numDigits = -1;
             if (patternString == null) {
                 // Use the default (non-compact) modifier.
index 92cdd5d3ff8b20160a595ec38c0b6a6087ebe751..cec506f639707f6ea19958e7eb2b61dec637ce93 100644 (file)
@@ -145,7 +145,7 @@ public class FormattedNumber {
         NumberStringBuilder temp = new NumberStringBuilder();
         int length = micros.modOuter.apply(temp, 0, 0);
         length += micros.modMiddle.apply(temp, 0, length);
-        length += micros.modInner.apply(temp, 0, length);
+        /* length += */ micros.modInner.apply(temp, 0, length);
         int prefixLength = micros.modOuter.getPrefixLength() + micros.modMiddle.getPrefixLength()
                 + micros.modInner.getPrefixLength();
         return temp.subSequence(0, prefixLength).toString();
index 8bba53a13d18fe1e8fbbcfad519790d215be8529..bed3481e95352d7904f300997f9057216b7df3f0 100644 (file)
@@ -349,7 +349,7 @@ public class DecimalFormatSymbols implements Cloneable, Serializable {
             if (cc == digitStr.length()) {
                 // One code point in this digit.
                 // If it is 1 UTF-16 code unit long, set it in tmpDigits.
-                if (cc == 1) {
+                if (cc == 1 && tmpDigits != null) {
                     tmpDigits[i] = (char) cp;
                 } else {
                     tmpDigits = null;