You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2016/07/04 15:26:59 UTC

svn commit: r1751317 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfo.java

Author: chetanm
Date: Mon Jul  4 15:26:59 2016
New Revision: 1751317

URL: http://svn.apache.org/viewvc?rev=1751317&view=rev
Log:
OAK-3404 - [multiplex]  Path to logical store mapping

Ensure that paths passed to PathUtils are sanitised. When running with
assertions enabled, paths with trailing slashes case AssertionErrors in
PathUtils.

Author - Robert Munteanu

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfo.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfo.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfo.java?rev=1751317&r1=1751316&r2=1751317&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfo.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/multiplex/MountInfo.java Mon Jul  4 15:26:59 2016
@@ -23,18 +23,32 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.List;
 
+import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+
 import org.apache.jackrabbit.oak.spi.mount.Mount;
 
 import static org.apache.jackrabbit.oak.commons.PathUtils.isAncestor;
 
 final class MountInfo {
+    
+    private static final Function<String, String> SANITIZE_PATH =  new Function<String,String>() {
+        @Override
+        public String apply(String input) {
+            if ( input.endsWith("/") && input.length() > 1) {
+                return input.substring(0, input.length() - 2); 
+            }
+            return input;
+        }
+    };
+    
     private final Mount mount;
     private final List<String> includedPaths;
 
     public MountInfo(Mount mount, List<String> includedPaths){
         this.mount = mount;
-        this.includedPaths = ImmutableList.copyOf(includedPaths);
+        this.includedPaths = cleanCopy(includedPaths);
     }
 
     public Mount getMount() {
@@ -46,7 +60,10 @@ final class MountInfo {
             return true;
         }
 
+        path = SANITIZE_PATH.apply(path);
+
         //TODO may be optimized via trie
+        
         for (String includedPath : includedPaths){
             if (includedPath.equals(path) || isAncestor(includedPath, path)) {
                 return true;
@@ -75,4 +92,9 @@ final class MountInfo {
         }
         return sw.toString();
     }
+    
+    private ImmutableList<String> cleanCopy(List<String> includedPaths) {
+        // ensure that paths don't have trailing slashes - this triggers an assertion in PahtUtils isAncestor
+        return ImmutableList.copyOf(Iterables.transform(includedPaths, SANITIZE_PATH));
+    }
 }