From: <va...@us...> - 2008-08-31 00:59:50
|
Revision: 13464 http://jedit.svn.sourceforge.net/jedit/?rev=13464&view=rev Author: vanza Date: 2008-08-31 00:59:47 +0000 (Sun, 31 Aug 2008) Log Message: ----------- SF Bug #2053299: ProjectViewer 2.9: Confused about symlinks It's not really PV who is confused, but combination of VFS reading the link before the real path, and the symlink loop detection code being way too strict. The loop detection logic should only be applied when resolving symlinks; symlinks that point to other directories in the same tree but don't form a loop can be safely traversed. This causes the traversal to return more data than before in certain cases, but it's returning the correct data given the user's filesystem. Modified Paths: -------------- jEdit/trunk/org/gjt/sp/jedit/io/VFS.java Modified: jEdit/trunk/org/gjt/sp/jedit/io/VFS.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/io/VFS.java 2008-08-31 00:44:17 UTC (rev 13463) +++ jEdit/trunk/org/gjt/sp/jedit/io/VFS.java 2008-08-31 00:59:47 UTC (rev 13464) @@ -1074,20 +1074,24 @@ String resolvedPath = directory; if (recursive && !MiscUtilities.isURL(directory)) { - // resolve symlinks to avoid loops resolvedPath = MiscUtilities.resolveSymlinks(directory); + /* + * If looking at a symlink, do not traverse the + * resolved path more than once. + */ + if (!directory.equals(resolvedPath)) + { + if (stack.contains(resolvedPath)) + { + Log.log(Log.ERROR,this, + "Recursion in listFiles(): " + + directory); + return; + } + stack.add(resolvedPath); + } } - if(stack.contains(resolvedPath)) - { - Log.log(Log.ERROR,this, - "Recursion in _listDirectory(): " - + directory); - return; - } - - stack.add(resolvedPath); - Thread ct = Thread.currentThread(); WorkThread wt = null; if (ct instanceof WorkThread) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |