LeeJuHyun created LANG-1629:
-------------------------------
Summary: DurationFormatUtils.formatPeriod is infinite repetition
when parameter is negative number
Key: LANG-1629
URL: https://issues.apache.org/jira/browse/LANG-1629
Project: Commons Lang
Issue Type: Bug
Components: lang.time.*
Affects Versions: 3.11
Reporter: LeeJuHyun
Fix For: Discussion
if parameter number(*startMillis*, *endMillis*) is negative number then below
while loop is infinite repetition. (278 line ~)
{code:java}
public static String formatPeriod(final long startMillis, final long endMillis,
final String format, final boolean padWithZeros,
final TimeZone timezone) {
Validate.isTrue(startMillis <= endMillis, "startMillis must not be greater
than endMillis");
// Used to optimise for differences under 28 days and
// called formatDuration(millis, format); however this did not work
// over leap years.
// TODO: Compare performance to see if anything was lost by
// losing this optimisation.
final Token[] tokens = lexx(format);
// ...
while (start.get(Calendar.YEAR) != target) {
days += start.getActualMaximum(Calendar.DAY_OF_YEAR) -
start.get(Calendar.DAY_OF_YEAR);
// Not sure I grok why this is needed, but the brutal tests show it is
if (start instanceof GregorianCalendar &&
start.get(Calendar.MONTH) == Calendar.FEBRUARY &&
start.get(Calendar.DAY_OF_MONTH) == 29) {
days += 1;
}
start.add(Calendar.YEAR, 1);
days += start.get(Calendar.DAY_OF_YEAR);
}{code}
How about putting in a validation to determine whether it's negative or
positive?
thank you :)
--
This message was sent by Atlassian Jira
(v8.3.4#803005)