Obviously erroneous code in JapaneseImperialCalendar::actualMonthLength
Tagir Valeev
amaembo at gmail.com
Mon May 24 08:46:19 UTC 2021
Hello!
When testing our static analyzer, I've found obviously erroneous code
in java.util.JapaneseImperialCalendar::actualMonthLength
int eraIndex = getTransitionEraIndex(jdate);
if (eraIndex == -1) {
long transitionFixedDate = sinceFixedDates[eraIndex];
CalendarDate d = eras[eraIndex].getSinceDate();
if (transitionFixedDate <= cachedFixedDate) {
length -= d.getDayOfMonth() - 1;
} else {
length = d.getDayOfMonth() - 1;
}
}
if this 'if' statement is visited then sinceFixedDates[eraIndex] will
surely fail with ArrayIndexOutOfBoundsException. However, judging from
the usages of this method, eraIndex is never -1 here, so the whole
'if' statement is a dead code. I'm not sure whether it should be
removed, or the condition should be changed to 'eraIndex != -1' (and
probably some unit-tests should be written to cover this). I have no
expertise in this code so I'm not sure what would be a proper way to
fix it. Please take a look.
With best regards,
Tagir Valeev.
More information about the core-libs-dev
mailing list