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));
+ }
}