From 122a779de8460591f6d6c9585dba2f715a00846d Mon Sep 17 00:00:00 2001 From: Peter Edberg Date: Mon, 12 Dec 2011 20:03:05 +0000 Subject: [PATCH] ICU-8958 Review fixes - better handling of error conditions X-SVN-Rev: 31099 --- icu4c/source/i18n/dtfmtsym.cpp | 28 ++++++++++++++++------------ icu4c/source/i18n/smpdtfmt.cpp | 10 ++++++---- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/icu4c/source/i18n/dtfmtsym.cpp b/icu4c/source/i18n/dtfmtsym.cpp index 3795c62add0..838bc0e3477 100644 --- a/icu4c/source/i18n/dtfmtsym.cpp +++ b/icu4c/source/i18n/dtfmtsym.cpp @@ -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 diff --git a/icu4c/source/i18n/smpdtfmt.cpp b/icu4c/source/i18n/smpdtfmt.cpp index bbffc93a718..0e936daf3f2 100644 --- a/icu4c/source/i18n/smpdtfmt.cpp +++ b/icu4c/source/i18n/smpdtfmt.cpp @@ -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 } } -- 2.40.0