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

Jens Scheffler commented on VFS-225:
------------------------------------

Good idea. Tried to nail down a very very simple example but failed to 
reproduce the same Exception using ZipFileSystem. But maybe I can contribute a 
bit more information from my debugging session.

Test Preparation:
Create a simple (even empty) text file called "Important!!.txt" in a folder 
called "Dir". ZIP the "Dir" folder into "Archive.zip" and place the ZIP into 
"C:\Temp" so that the resulting URI would look like:
zip:file:///C:/Temp/Archive.zip!/Dir/Important!!!.txt

If you execute the following code:
            FileSystemManager mgr = VFS.getManager();
            FileObject f = mgr.resolveFile("zip:file:///C:/Temp/Archive.zip!/");
            FileObject[] content = f.findFiles(Selectors.SELECT_ALL);
            for (FileObject item : content) {
                System.out.println(item.toString());
            }
...you will NOT find the file. A problem in ZipFileSystem prevents the same 
exceptions which I initially reported here due to pre-parsing of whole ZIP file 
and validation of references.

Nevertheless in the VFS provider which I'm currently writing I have from the 
same root cause the described exception.

Root of the problem seems to be the parsing of layered file system names, a 
string scanner goes backwards and tried to find the last "!" char in the file 
name.
It is in LayeredFileNameParser.extractRootName(StringBuffer)

Please tell me if I should contribute something further here.

> File name parsing issues in layered file systems
> ------------------------------------------------
>
>                 Key: VFS-225
>                 URL: https://issues.apache.org/jira/browse/VFS-225
>             Project: Commons VFS
>          Issue Type: Bug
>    Affects Versions: 1.0
>         Environment: Windows XP SP2 - but also assuming in other environments
>            Reporter: Jens Scheffler
>
> The "!" character is used as delimiter for e.g. ZIP file access as VFS 
> component.
> When trying to traverse a layered file, e.g. traversing a ZIP content and the 
> ZIP contains a file with a "!" in the file name itself then a 
> FileSystemException appears - it seems that the parsing routine for layered 
> filenames is stumbling over the "!" character.
> Exception trace for a test VFS component:
> org.apache.commons.vfs.FileSystemException: Incorrect file system URI 
> "syncdb:file:///C:/Temp/test.xml!/c/temp/Maps/Important to Read!!/" in name 
> "syncdb:file:///C:/Temp/test.xml!/c/temp/Maps/Important to Read!!.txt", was 
> expecting "syncdb:file:///C:/Temp/test.xml!/".
>       at 
> org.apache.commons.vfs.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:274)
>       at 
> org.apache.commons.vfs.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:267)
>       at 
> org.apache.commons.vfs.provider.AbstractFileObject.resolveFile(AbstractFileObject.java:670)
>       at 
> de.jensscheffler.ftpsync.db.SyncFileSystemTest.treeCopy(SyncFileSystemTest.java:87)
>       (...)
> As the accessing code was just traversing a folder tree with no chance to 
> handle this, is there any alternative for traversing through these layered 
> file systems when the content contains special characters?
> Maybe the approach for parsing needs to be enhanced also, I could offer some 
> help but maybe need a hint to contribute a fix.

-- 
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