1diff --git a/source/i18n/japancal.cpp b/source/i18n/japancal.cpp 2index fc18d6c0..82cc4538 100644 3--- a/source/i18n/japancal.cpp 4+++ b/source/i18n/japancal.cpp 5@@ -221,8 +221,16 @@ void JapaneseCalendar::handleComputeFields(int32_t julianDay, UErrorCode& status 6 int32_t year = internalGet(UCAL_EXTENDED_YEAR); // Gregorian year 7 int32_t eraIdx = gJapaneseEraRules->getEraIndex(year, internalGetMonth() + 1, internalGet(UCAL_DAY_OF_MONTH), status); 8 9+ int32_t startYear = gJapaneseEraRules->getStartYear(eraIdx, status) - 1; 10+ if (U_FAILURE(status)) { 11+ return; 12+ } 13+ if (uprv_add32_overflow(year, -startYear, &year)) { 14+ status = U_ILLEGAL_ARGUMENT_ERROR; 15+ return; 16+ } 17 internalSet(UCAL_ERA, eraIdx); 18- internalSet(UCAL_YEAR, year - gJapaneseEraRules->getStartYear(eraIdx, status) + 1); 19+ internalSet(UCAL_YEAR, year); 20 } 21 22 /* 23