Return-Path: X-Original-To: apmail-commons-issues-archive@minotaur.apache.org Delivered-To: apmail-commons-issues-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 46DAFDC4C for ; Tue, 2 Oct 2012 20:27:09 +0000 (UTC) Received: (qmail 79166 invoked by uid 500); 2 Oct 2012 20:27:08 -0000 Delivered-To: apmail-commons-issues-archive@commons.apache.org Received: (qmail 79040 invoked by uid 500); 2 Oct 2012 20:27:08 -0000 Mailing-List: contact issues-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: issues@commons.apache.org Delivered-To: mailing list issues@commons.apache.org Received: (qmail 79025 invoked by uid 99); 2 Oct 2012 20:27:08 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 02 Oct 2012 20:27:08 +0000 Date: Wed, 3 Oct 2012 07:27:08 +1100 (NCT) From: "Dan Tran (JIRA)" To: issues@commons.apache.org Message-ID: <233343707.156087.1349209628569.JavaMail.jiratomcat@arcas> In-Reply-To: <1892138664.90363.1347925268919.JavaMail.jiratomcat@arcas> 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/VFS-437?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13468041#comment-13468041 ] Dan Tran commented on VFS-437: ------------------------------ Hi Gary, Dennis, Jason, and I work on the same team. Other way to reproduce this issue is 1. use anonymous account on a linux ftp server 2. On your anonymous workspace create a symlink ( Vol1 to /Vol1 ). The ftp'ls command should show ftp> ls -al 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. drwxr-xr-x 4 0 0 4096 Oct 02 19:02 . drwxr-xr-x 4 0 0 4096 Oct 02 19:02 .. lrwxrwxrwx 1 0 0 5 Oct 02 19:02 Vol1 -> /Vol1 drwxr-xr-x 2 0 0 4096 Sep 03 2009 pub -rw-r--r-- 1 0 0 224 Nov 09 2004 welcome.msg 226 Directory send OK. ftp:385 bytes received in 0.00Seconds 385000.00Kbytes/sec. 3. Use vfs-maven-plugin to issue the following command ( provided that you have access to codehaus's snapshot repository mvn vfs:list -DsourceId=ftp.anonymous -Dsource=ftp://your.ftp.host/Vol1 This is very edgecase, however, it crashes our server application. > [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 > > > 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