]> granicus.if.org Git - icu/commitdiff
ICU-12052 Adding test case for null-pointer bug in unum_parseDoubleCurrency.
authorShane Carr <shane@unicode.org>
Sat, 28 Apr 2018 05:50:52 +0000 (05:50 +0000)
committerShane Carr <shane@unicode.org>
Sat, 28 Apr 2018 05:50:52 +0000 (05:50 +0000)
X-SVN-Rev: 41289

icu4c/source/test/cintltst/cnumtst.c

index 46b8a762a1d65dba3d35747bc2ae2f93e8348d77..649789e5ca0597d1b61b85d208241bb1b21c2b0c 100644 (file)
@@ -65,6 +65,7 @@ static void TestVariousStylesAndAttributes(void);
 static void TestParseCurrPatternWithDecStyle(void);
 static void TestFormatForFields(void);
 static void TestRBNFRounding(void);
+static void Test12052_NullPointer(void);
 
 #define TESTCASE(x) addTest(root, &x, "tsformat/cnumtst/" #x)
 
@@ -97,6 +98,7 @@ void addNumForTest(TestNode** root)
     TESTCASE(TestVariousStylesAndAttributes);
     TESTCASE(TestParseCurrPatternWithDecStyle);
     TESTCASE(TestFormatForFields);
+    TESTCASE(Test12052_NullPointer);
 }
 
 /* test Parse int 64 */
@@ -3067,4 +3069,17 @@ static void TestFormatForFields(void) {
     }
 }
 
+static void Test12052_NullPointer() {
+    UErrorCode status = U_ZERO_ERROR;
+    static const UChar input[] = u"199a";
+    UChar currency[200] = {0};
+    UNumberFormat *theFormatter = unum_open(UNUM_CURRENCY, NULL, 0, "en_US", NULL, &status);
+    status = U_ZERO_ERROR;
+    unum_setAttribute(theFormatter, UNUM_LENIENT_PARSE, 1);
+    int32_t pos = 1;
+    unum_parseDoubleCurrency(theFormatter, input, -1, &pos, currency, &status);
+    assertEquals("should fail gracefully", "U_PARSE_ERROR", u_errorName(status));
+    unum_close(theFormatter);
+}
+
 #endif /* #if !UCONFIG_NO_FORMATTING */