From c50a4aa6698774a8bf3135cc42489875009236e0 Mon Sep 17 00:00:00 2001 From: Britt Park Date: Mon, 24 Jul 2006 16:14:14 +0000 Subject: [PATCH] Relaxed path requirements. foo://figwump/thneedle///wart/ is now seen as equivalent to foo:/figwump/thneedle/wart. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3392 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/repo/avm/AVMServiceTest.java | 18 ++++++++++++++++++ .../org/alfresco/repo/avm/AVMStoreImpl.java | 13 ++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) 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; }