]> granicus.if.org Git - icu/commitdiff
ICU-8958 Review fixes - better handling of error conditions
authorPeter Edberg <pedberg@unicode.org>
Mon, 12 Dec 2011 20:03:05 +0000 (20:03 +0000)
committerPeter Edberg <pedberg@unicode.org>
Mon, 12 Dec 2011 20:03:05 +0000 (20:03 +0000)
X-SVN-Rev: 31099

icu4c/source/i18n/dtfmtsym.cpp
icu4c/source/i18n/smpdtfmt.cpp

index 3795c62add09b0222ccc09a0fb2971a5e4d46328..838bc0e34773dcbc66b8d597a1e6aceb74c6cb63 100644 (file)
@@ -1331,21 +1331,25 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError
        narrowEras = ures_getByKeyWithFallback(erasMain, gNamesAbbrTag, NULL, &status);
     }
 
-    UResourceBundle *monthPatterns = calData.getByKey(gMonthPatternsTag, status);
-    if (U_SUCCESS(status) && monthPatterns != NULL) {
+    UErrorCode monthPatternStatus = U_ZERO_ERROR;
+    UResourceBundle *monthPatterns = calData.getByKey(gMonthPatternsTag, monthPatternStatus);
+    if (U_SUCCESS(monthPatternStatus) && monthPatterns != NULL) {
         fLeapMonthPatterns = newUnicodeStringArray(kMonthPatternsCount);
         if (fLeapMonthPatterns) {
-            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatWide, calData.getByKey2(gMonthPatternsTag, gNamesWideTag, status), status);
-            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatAbbrev, calData.getByKey2(gMonthPatternsTag, gNamesAbbrTag, status), status);
-            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatNarrow, calData.getByKey2(gMonthPatternsTag, gNamesNarrowTag, status), status);
-            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneWide, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesWideTag, status), status);
-            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneAbbrev, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesAbbrTag, status), status);
-            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneNarrow, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesNarrowTag, status), status);
-            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternNumeric, calData.getByKey3(gMonthPatternsTag, gNamesNumericTag, gNamesAllTag, status), status);
-            fLeapMonthPatternsCount = kMonthPatternsCount;
+            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatWide, calData.getByKey2(gMonthPatternsTag, gNamesWideTag, monthPatternStatus), monthPatternStatus);
+            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatAbbrev, calData.getByKey2(gMonthPatternsTag, gNamesAbbrTag, monthPatternStatus), monthPatternStatus);
+            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatNarrow, calData.getByKey2(gMonthPatternsTag, gNamesNarrowTag, monthPatternStatus), monthPatternStatus);
+            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneWide, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesWideTag, monthPatternStatus), monthPatternStatus);
+            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneAbbrev, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesAbbrTag, monthPatternStatus), monthPatternStatus);
+            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneNarrow, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesNarrowTag, monthPatternStatus), monthPatternStatus);
+            initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternNumeric, calData.getByKey3(gMonthPatternsTag, gNamesNumericTag, gNamesAllTag, monthPatternStatus), monthPatternStatus);
+            if (U_SUCCESS(monthPatternStatus)) {
+                fLeapMonthPatternsCount = kMonthPatternsCount;
+            } else {
+                delete[] fLeapMonthPatterns;
+                fLeapMonthPatterns = NULL;
+            }
         }
-    } else {
-        status = U_ZERO_ERROR;
     }
 
     UResourceBundle *lsweekdaysData = NULL; // Data closed by calData
index bbffc93a7189708513ee867dafebad20da6939eb..0e936daf3f239f600919f7ebbc4e6305a9e01980 100644 (file)
@@ -1926,10 +1926,12 @@ SimpleDateFormat::parse(const UnicodeString& text, Calendar& cal, ParsePosition&
     }
     
     if (fSymbols->fLeapMonthPatterns != NULL && fSymbols->fLeapMonthPatternsCount >= DateFormatSymbols::kMonthPatternsCount) {
-        UErrorCode nlmfStatus = U_ZERO_ERROR;
-        numericLeapMonthFormatter = new MessageFormat(fSymbols->fLeapMonthPatterns[DateFormatSymbols::kLeapMonthPatternNumeric], fLocale, nlmfStatus);
-        if (U_FAILURE(nlmfStatus)) {
-            numericLeapMonthFormatter = NULL;
+        numericLeapMonthFormatter = new MessageFormat(fSymbols->fLeapMonthPatterns[DateFormatSymbols::kLeapMonthPatternNumeric], fLocale, status);
+        if (numericLeapMonthFormatter == NULL) {
+             status = U_MEMORY_ALLOCATION_ERROR;
+             goto ExitParse;
+        } else if (U_FAILURE(status)) {
+             goto ExitParse; // this will delete numericLeapMonthFormatter
         }
     }