• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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