[jira] [Commented] (VFS-398) FtpFileObject.getChildren() fails when a folder contains a file with a colon in the name

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[jira] [Commented] (VFS-398) FtpFileObject.getChildren() fails when a folder contains a file with a colon in the name

JIRA jira@apache.org

    [ https://issues.apache.org/jira/browse/VFS-398?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16746342#comment-16746342 ]

Bernd Eckenfels commented on VFS-398:

I think the overall idea of checking for known schemes is an option to solve this dilemma (unclear when URI and when file names are used), but I am not sure about the implementation details: the change seems to use getScheme() very often and this method constructs a new response object every time, that might be performance critical (I havent measured it yet, but in the past I say a lot of resolves in normal operations).

Also changing the sequence of cleanup when closing the manager was very tricky in the past, so hopefully providers.clear() is ok in the new patch.

> FtpFileObject.getChildren() fails when a folder contains a file with a colon in the name
> ----------------------------------------------------------------------------------------
>                 Key: VFS-398
>                 URL: https://issues.apache.org/jira/browse/VFS-398
>             Project: Commons VFS
>          Issue Type: Bug
>    Affects Versions: 2.0
>         Environment: Connecting via FTP to a host running SunOS 5.10
>            Reporter: Mark Leonard
>            Assignee: Otto Fowler
>            Priority: Blocker
>         Attachments: VFS-398-gg-00.patch
> In line 767 of DefaultFileSystemManager.java the UriParser's extractScheme() method is called:
>         String scheme = UriParser.extractScheme(buffer.toString());
> This code was added in revision 780730
> http://svn.apache.org/viewvc?view=revision&revision=780730
> It is not clear to me why this change was made.
> For the FTP provider, buffer contains a plain file name (i.e. without a path and definitely not in URI form)
> A colon is a valid character for a file name.
> However a colon will be interpreted as a URI scheme name.
> This causes an exception when the resolved path is checked using AbstractFileName.checkName()
> Sample code:
> FileObject fo = VFS.getManager().resolveFile("ftp://user:pass@host/some/path/some.file");
> fo.getParent().getChildren();
> If /some/path/ contains a child such as PREFIX:SUFFIX then an exception is thrown:
> Exception in thread "main" org.apache.commons.vfs2.FileSystemException: Invalid descendent file name "PREFIX:SUFFIX".
> at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveName(DefaultFileSystemManager.java:791)
> at org.apache.commons.vfs2.provider.AbstractFileObject.getChildren(AbstractFileObject.java:710)
> at org.apache.commons.vfs2.provider.ftp.FtpFileObject.getChildren(FtpFileObject.java:420)
> Therefore calling code is unable to list the children of the specified folder.

This message was sent by Atlassian JIRA