commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gary D. Gregory (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (VFS-437) [FTP] Program crashes when StackOverFlow Exception happens from pulling a softlinked directory that link to the directory that has the same name one level above
Date Thu, 04 Oct 2012 16:15:47 GMT

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

Gary D. Gregory commented on VFS-437:
-------------------------------------

I've attached a new patch that implements the same kind of logic but for more methods. 

Can you test this in your set up?

Also, do you see doGetChildren() as needing to check for circular links as well?
                
> [FTP] Program crashes when StackOverFlow Exception happens from pulling a softlinked
directory that link to the directory that has the same name one level above 
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: VFS-437
>                 URL: https://issues.apache.org/jira/browse/VFS-437
>             Project: Commons VFS
>          Issue Type: Bug
>    Affects Versions: 2.0
>         Environment: java version "1.7.0_02"
> Java(TM) SE Runtime Environment (build 1.7.0_02-b13)
> Java HotSpot(TM) 64-Bit Server VM (build 22.0-b10, mixed mode)
> Linux version 2.6.18-238.el5 (mockbuild@builder10.centos.org) (gcc version 4.1.2 20080704
(Red Hat 4.1.2-48)) #1 SMP Thu Jan 13 15:51:15 EST 2011
>            Reporter: Jason
>            Priority: Blocker
>             Fix For: 2.1
>
>         Attachments: VFS-437.diff, vfs-437-v2-gg.diff
>
>
> With the setting below, StackOverFlow exceptions occur and server crashes
> set the builder.setUserDirlsRoot (opt, true)
> Attept to pull with:
> ftp://root:password@ip:/Vol1
> Vol directory has the following info
> lrwxrwxrwx  1 root root        5 Oct  5  2007 Vol1 -> /Vol1
> When it tries to look for the parent of the Vol1, it goes back to the same Vol1, which
causes a infinite loop that eventually creates stackoverflow exception.
> The problem is inside the doGetType() method in FtpFileObject
>     @Override
>     protected FileType doGetType()
>         throws Exception
>     {
>         // VFS-210
>         synchronized (getFileSystem())
>         {
>             if (this.fileInfo == null)
>             {
>                 getInfo(false);
>             }
>             if (this.fileInfo == UNKNOWN)
>             {
>                 return FileType.IMAGINARY;
>             }
>             else if (this.fileInfo.isDirectory())
>             {
>                 return FileType.FOLDER;
>             }
>             else if (this.fileInfo.isFile())
>             {
>                 return FileType.FILE;
>             }
>             else if (this.fileInfo.isSymbolicLink())
>             {
>                 return getLinkDestination().getType();
>             }
>         }
>         throw new FileSystemException("vfs.provider.ftp/get-type.error", getName());
>     }
> It will keep hitting the "else if (this.fileinfo.isSymbolicLink())" condition and the
fileinfo displayed is always the Vol1 under root directory.
> Exception is shown below
> java.lang.StackOverflowError
> 	at org.apache.commons.net.ftp.FTPFile.isDirectory(FTPFile.java:116)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:334)
> 	at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:344)
> 	at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:344)
> 	at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:344)
> 	at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:344)
> 	at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:344)
> 	at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:344)
> 	at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:344)
> 	at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:344)
> 	at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:344)
> 	at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:344)
> 	at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:344)
> 	at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
> 	at org.apache.commons.vfs2.provider.ftp.FtpFileObject.doGetType(FtpFileObject.java:344)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message