[ 
https://issues.apache.org/jira/browse/LANG-1629?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gary D. Gregory closed LANG-1629.
---------------------------------
    Fix Version/s: 3.17.0
                       (was: Discussion)
       Resolution: Fixed

> 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: 2.6
>            Reporter: LeeJuHyun
>            Priority: Major
>             Fix For: 3.17.0
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> 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.20.10#820010)

Reply via email to