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