DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=32034>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=32034

UnixFTPEntryParser.java fails to properly set MILLISECONDS field on FTPFile

           Summary: UnixFTPEntryParser.java fails to properly set
                    MILLISECONDS field on FTPFile
           Product: Commons
           Version: 1.0 Alpha
          Platform: All
               URL: http://cvs.apache.org/viewcvs.cgi/jakarta-
                    commons/net/src/java/org/apache/commons/net/ftp/parser/U
                    nixFTPEntryParser.java?rev=1.19&view=markup
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Net
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


[This defect may affect other parsers too -- I haven't checked.]

On listings returned from UNIX FTP servers, only the hour and minute of the
modification time of a given FTPFile is shown. UnixFTPEntryParser.java does the
following when encountering such a listing:


            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.HOUR_OF_DAY, 0);

            try
            {
                int pos = MONTHS.indexOf(mo);
                int month = pos / 4;

                if (null != yr)
                {
                    // it's a year
                    cal.set(Calendar.YEAR, Integer.parseInt(yr));
                }
                else
                {
                    // it must be  hour/minute or we wouldn't have matched
                    int year = cal.get(Calendar.YEAR);
                    // if the month we're reading is greater than now, it must
                    // be last year
                    if (cal.get(Calendar.MONTH) < month)
                    {
                        year--;
                    }
                    cal.set(Calendar.YEAR, year);
                    cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hr));
                    cal.set(Calendar.MINUTE, Integer.parseInt(min));
                }
                cal.set(Calendar.MONTH, month);

                cal.set(Calendar.DATE, Integer.parseInt(da));
                file.setTimestamp(cal);

Unfortunately, the code does not properly set the MILLISECOND field of the
original Calendar object. This means the MILLISECOND field is dependent upon the
system time that the object is actually created. Therefore, the FTPFile's
timestamp is wrong.

I propose that the above code be patched to add a cal.set(Calendar.MILLISECOND, 0);

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to