FTPFileEntryParserImpl.preParse() doesn't remove unparsable entries at the end 
of the file list
-----------------------------------------------------------------------------------------------

                 Key: NET-225
                 URL: https://issues.apache.org/jira/browse/NET-225
             Project: Commons Net
          Issue Type: Bug
    Affects Versions: 1.4, 2.1
         Environment: commons-net-1.4.1; Windows XP/2003; JRE 1.5.013-b05; Ant 
1.7.0; Embedded FTP server UNIX type L8;
            Reporter: Sergey Shcherbakov


I am using Ant 1.7.0 task to get files from our Embedded FTP server:
<ftp server="${xxxximage.master.test.xxxx.ip}"
        port="${xxxximage.master.test.xxxx.port}"
        userid="${xxxximage.master.test.xxxx.user}"
        password="${xxxximage.master.test.xxxx.password}"
        remotedir="${xxxximage.master.test.xxxx.dir}"
        retriesAllowed="3"
        action="get"
        skipFailedTransfers="true"
        systemTypeKey="UNIX"
        >
    <fileset dir="${xxxximage.master.dist.test.nunit.dir}">
                <include name="${xxxximage.master.test.xxxx.results}"/>
</fileset>
</ftp>
Ant task crashes with the following error message:
java.lang.NullPointerException
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:115)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:357)
        at org.apache.tools.ant.Target.performTasks(Target.java:385)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
cutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
        at org.apache.tools.ant.Main.runBuild(Main.java:698)
        at org.apache.tools.ant.Main.startAnt(Main.java:199)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
Caused by: java.lang.NullPointerException
        at org.apache.tools.ant.taskdefs.optional.net.FTP$FTPDirectoryScanner.ch
eckRemoteSensitivity(FTP.java:583)
        at org.apache.tools.ant.taskdefs.optional.net.FTP$FTPDirectoryScanner.fo
rceRemoteSensitivityCheck(FTP.java:552)
        at org.apache.tools.ant.taskdefs.optional.net.FTP$FTPDirectoryScanner.sc
an(FTP.java:231)
        at org.apache.tools.ant.taskdefs.optional.net.FTP.transferFiles(FTP.java
:1570)
        at org.apache.tools.ant.taskdefs.optional.net.FTP.transferFiles(FTP.java
:1683)
        at org.apache.tools.ant.taskdefs.optional.net.FTP.execute(FTP.java:2373)

        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
        at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:105)
        ... 11 more
--- Nested Exception ---
java.lang.NullPointerException
        at org.apache.tools.ant.taskdefs.optional.net.FTP$FTPDirectoryScanner.ch
eckRemoteSensitivity(FTP.java:583)
        at org.apache.tools.ant.taskdefs.optional.net.FTP$FTPDirectoryScanner.fo
rceRemoteSensitivityCheck(FTP.java:552)
        at org.apache.tools.ant.taskdefs.optional.net.FTP$FTPDirectoryScanner.sc
an(FTP.java:231)
        at org.apache.tools.ant.taskdefs.optional.net.FTP.transferFiles(FTP.java
:1570)
        at org.apache.tools.ant.taskdefs.optional.net.FTP.transferFiles(FTP.java
:1683)
        at org.apache.tools.ant.taskdefs.optional.net.FTP.execute(FTP.java:2373)

        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
        at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:105)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:357)
        at org.apache.tools.ant.Target.performTasks(Target.java:385)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
cutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
        at org.apache.tools.ant.Main.runBuild(Main.java:698)
        at org.apache.tools.ant.Main.startAnt(Main.java:199)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)

The problem is in the Commons-Net library used internally by the Ant task.
Our FTP server returns empty string at the end of the requested folder file 
list that causes the org.apache.commons.net.ftp.FtpClient.listFiles() method to 
return FTPFile array with null elements at the end, which in turn causes 
NullPointer exception in the 
org.apache.tools.ant.taskdefs.optional.net.FTP.checkRemoteSensivity() method.

The problem occurs because the 
org.apache.commons.net.ftp.FTPFileEntryParserImpl.preParse() methods designed 
to wipe off non-valid lines from the file list response doesn't remove trailing 
empty lines from response inspite of its Javadoc description: "This default 
implementation removes entries that do not parse as files."

The issue can be fixed by removing
else {
   break;
}
clause from the method's implementation.

I have checked the HEAD version of the FTPFileEntryParserImpl.java file. The 
else{ break; } clause still remains there and I can reproduce issue with the 
HEAD version of the commons.net.ftp, thus I am assuming that the issue occurs 
in the commons-net 1.4.1 as well as in the latest development version.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to