SLING-10088 - Correctly escape paths
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
index 43ac3c6..0586cfc 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
@@ -36,6 +36,7 @@
import java.util.Properties;
import java.util.Set;
import java.util.TreeMap;
+import java.util.regex.Pattern;
import java.util.zip.Deflater;
import org.apache.commons.io.FileUtils;
@@ -89,7 +90,7 @@
boolean deep = distributionRequest.isDeep(path);
PathFilterSet nodeFilterSet = new PathFilterSet(path);
if (!deep) {
- nodeFilterSet.addInclude(new DefaultPathFilter(path));
+ nodeFilterSet.addInclude(new DefaultPathFilter(Pattern.quote(path)));
}
initFilterSet(nodeFilterSet, nodeFilters, patterns);
diff --git a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java
index 210a80e..4297b85 100644
--- a/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java
+++ b/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java
@@ -29,6 +29,7 @@
import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
import org.apache.sling.distribution.DistributionRequest;
import org.apache.sling.distribution.SimpleDistributionRequest;
+import org.hamcrest.Matchers;
import org.junit.Test;
import static org.apache.sling.distribution.DistributionRequestType.*;
@@ -113,4 +114,25 @@
assertEquals("-.*/foo", filtersForSomePath.get(0));
assertEquals("-.*/bar", filtersForSomePath.get(1));
}
+
+ @Test
+ public void testCreateFilterWithParenthesis() {
+ DistributionRequest request = new SimpleDistributionRequest(ADD, false, "/nodewith(shouldwork");
+ NavigableMap<String, List<String>> nodeFilters = new TreeMap<String, List<String>>();
+ NavigableMap<String, List<String>> propFilters = new TreeMap<String, List<String>>();
+ VltUtils.createFilter(request, nodeFilters, propFilters);
+ }
+
+ @Test
+ public void testSanitizeWithPolicyNodeIsConvertedToDeepPath() {
+ String pathWithPolicy = "/nodewith(shouldwork/rep:policy";
+ String pathWithoutPolicy = "/nodewith(shouldwork";
+ DistributionRequest request = new SimpleDistributionRequest(ADD, false, pathWithPolicy, pathWithoutPolicy);
+ assertThat(request.isDeep(pathWithPolicy), Matchers.equalTo(false));
+ assertThat(request.isDeep(pathWithoutPolicy), Matchers.equalTo(false));
+ DistributionRequest sanitizedRequest = VltUtils.sanitizeRequest(request);
+ assertThat(sanitizedRequest.isDeep(pathWithPolicy), Matchers.equalTo(true));
+ assertThat(sanitizedRequest.isDeep(pathWithoutPolicy), Matchers.equalTo(false));
+ }
+
}
\ No newline at end of file