diff --git a/source/java/org/alfresco/repo/avm/AVMServiceTest.java b/source/java/org/alfresco/repo/avm/AVMServiceTest.java index 0b51f8e630..e166439794 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceTest.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceTest.java @@ -39,6 +39,24 @@ import org.alfresco.service.namespace.QName; */ public class AVMServiceTest extends AVMServiceTestBase { + /** + * Test goofy paths. + */ + public void testGoofyPaths() + { + try + { + setupBasicTree(); + fService.getFileInputStream(-1, "main://a/b/c/foo").close(); + fService.getDirectoryListing(-1, "main:/a/"); + } + catch (Exception e) + { + e.printStackTrace(System.err); + fail(); + } + } + /** * Test getting deleted names. */ diff --git a/source/java/org/alfresco/repo/avm/AVMStoreImpl.java b/source/java/org/alfresco/repo/avm/AVMStoreImpl.java index 160d371ada..0b716c7b00 100644 --- a/source/java/org/alfresco/repo/avm/AVMStoreImpl.java +++ b/source/java/org/alfresco/repo/avm/AVMStoreImpl.java @@ -519,18 +519,21 @@ class AVMStoreImpl implements AVMStore, Serializable { throw new AVMException("Invalid path: " + path); } - if (path.length() > 1) + while (path.startsWith("/")) { path = path.substring(1); } - String[] pathElements = path.split("/"); + while (path.endsWith("/")) + { + path = path.substring(0, path.length() - 1); + } + String[] pathElements = path.split("/+"); // Grab the root node to start the lookup. DirectoryNode dir = null; // Versions less than 0 mean get current. if (version < 0) { - dir = fRoot; // TODO How to factor out this kind of Hibernate goofiness. - // (DirectoryNode)AVMNodeUnwrapper.Unwrap(fRoot); + dir = fRoot; } else { @@ -539,7 +542,7 @@ class AVMStoreImpl implements AVMStore, Serializable // Add an entry for the root. result.add(dir, "", write); dir = (DirectoryNode)result.getCurrentNode(); - if (pathElements.length == 0) + if (pathElements.length == 1 && pathElements[0].equals("")) { return result; }