Uploaded image for project: 'Commons Net'
  1. Commons Net
  2. NET-190

[FTP Client] Not listing files with 'invalid' date

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Duplicate
    • Affects Version/s: 1.4
    • Fix Version/s: None
    • Component/s: None
    • Labels:
      None
    • Environment:

      FTP Gateway: Response: 331-httpiproxy2 FTP server (Version 1.9.2.4 - 2005/01/11 13:03:28) ready.
      FTP Server: Response: 215 UNIX Type: L8
      FTP Client: Jakarta Commons VFS over Jakarta Commons NET

      Description

      When trying to list files in a FTP directory with two files returns 0 FileObjects.

      With another FTP client.... response is:
      ftp> ls
      227 Entering Passive Mode (212,163,35,155,160,40)
      150 Conexión de datos aceptada
      rw-rr- 1 0 0 222 Feb 29 09:47 AYC01R
      rw-rr- 1 0 0 688 Feb 29 03:04 AYC02R
      226-Options: -l
      226 2 ocurrencias en total

      ... so there are two files with date "FEBRUARY 29" (2008 is a leap year)

      When listing files with Jakarta Commons VFS over Jakarta Commons NET it returns 0 files.

      I revised Commons Net source and I found in 'org.apache.commons.net.ftp.parser.UnixFTPEntryParser' the following code:
      try

      { file.setTimestamp(super.parseTimestamp(datestr)); }

      catch (ParseException e)

      { return null; // this is a parsing failure too. }

      So I guess maybe the timestamp parser is throwing a ParseException (perhaps it's guessing a incorrect year) and in this case is returning NULL so the calling class is ignoring these files with 'Feb 29' date.

      I think this behaviour is incorrect and must be fixed. If date is considered invalid it would throw an exception,... not simply ignore the file.

        Issue Links

          Activity

          Hide
          timfooy Tim Fooy added a comment -

          Seems highly related to NET-188.

          Show
          timfooy Tim Fooy added a comment - Seems highly related to NET-188 .
          Hide
          bladerunner Wolfgang Pasche added a comment -

          I just entered to submit the same issue. In my opinion, the solution must be to add the year field before the first parse, instead of doing this after successful parsing (which is done now). The reason for this problem is the stupid behaviour of all unix systems, to omit the year, when displaying dates in the "nearest" past (I don't know the limit). Unfortunately even the ftp servers do the same.

          It would be very nice, if someone could fix this issue shortly, because we programmed a JobScheduler on base of commons.net, and so at the moment this program is not able to get any file from a directory containing a file from Feb 29 because of the null elements in the FtpFile array (okay, this could be fixed by skipping the nulls, but of course we need also to get the files from this date).

          Thanks in advance

          W. Pasche, Sabre Travel Networks

          Show
          bladerunner Wolfgang Pasche added a comment - I just entered to submit the same issue. In my opinion, the solution must be to add the year field before the first parse, instead of doing this after successful parsing (which is done now). The reason for this problem is the stupid behaviour of all unix systems, to omit the year, when displaying dates in the "nearest" past (I don't know the limit). Unfortunately even the ftp servers do the same. It would be very nice, if someone could fix this issue shortly, because we programmed a JobScheduler on base of commons.net, and so at the moment this program is not able to get any file from a directory containing a file from Feb 29 because of the null elements in the FtpFile array (okay, this could be fixed by skipping the nulls, but of course we need also to get the files from this date). Thanks in advance W. Pasche, Sabre Travel Networks
          Hide
          wpoziombka Wade Poziombka added a comment -

          I've drilled in and the problem is that the timestamp parsing code depends on SimpleDateFormat with leniency disabled. That does not parse the date e.g., "Feb 29 17:46".

          ParsePosition pp = new ParsePosition(0);
          SimpleDateFormat format = new SimpleDateFormat("MMM d HH:mm");
          format.setLenient(false);
          Date date = format.parse("Feb 29 17:46", pp);

          Yields null. This should probably be a little smarter about how it parsed timestamps. One should append the year to the recent date before parsing with SimpleDateFormat. For instance,

          Calendar c = Calendar.getInstance();
          ParsePosition pp = new ParsePosition(0);
          SimpleDateFormat recentWithYear = new SimpleDateFormat("MMM d HH:mmyyyy");
          format.setLenient(false);
          Date date = recentWithYear.parse("Feb 29 17:46" + c.get(Calendar.YEAR), pp);

          produces the correct date.

          Show
          wpoziombka Wade Poziombka added a comment - I've drilled in and the problem is that the timestamp parsing code depends on SimpleDateFormat with leniency disabled. That does not parse the date e.g., "Feb 29 17:46". ParsePosition pp = new ParsePosition(0); SimpleDateFormat format = new SimpleDateFormat("MMM d HH:mm"); format.setLenient(false); Date date = format.parse("Feb 29 17:46", pp); Yields null. This should probably be a little smarter about how it parsed timestamps. One should append the year to the recent date before parsing with SimpleDateFormat. For instance, Calendar c = Calendar.getInstance(); ParsePosition pp = new ParsePosition(0); SimpleDateFormat recentWithYear = new SimpleDateFormat("MMM d HH:mmyyyy"); format.setLenient(false); Date date = recentWithYear.parse("Feb 29 17:46" + c.get(Calendar.YEAR), pp); produces the correct date.

            People

            • Assignee:
              Unassigned
              Reporter:
              diego.souto Diego Souto
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - 3h
                3h
                Remaining:
                Remaining Estimate - 3h
                3h
                Logged:
                Time Spent - Not Specified
                Not Specified

                  Development