This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git


The following commit(s) were added to refs/heads/master by this push:
     new ea9a345  SLING-10447 Adjust query so that sling:vanityPath properties 
are not searched in the JCR version storage
ea9a345 is described below

commit ea9a34577edf7eff53b5a8f8bd4f1417a72af5aa
Author: Henry Kuijpers <[email protected]>
AuthorDate: Thu Aug 26 13:10:17 2021 +0200

    SLING-10447 Adjust query so that sling:vanityPath properties are not 
searched in the JCR version storage
---
 .../resourceresolver/impl/mapping/MapEntries.java      | 18 ++++++++++++++----
 .../impl/mapping/InMemoryResourceProvider.java         |  2 +-
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java 
b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
index 3047d30..9568dab 100644
--- 
a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
+++ 
b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
@@ -86,7 +86,10 @@ public class MapEntries implements
 
     public static final int DEFAULT_DEFAULT_VANITY_PATH_REDIRECT_STATUS = 
HttpServletResponse.SC_FOUND;
 
-    private static final String JCR_SYSTEM_PREFIX = "/jcr:system/";
+    @SuppressWarnings("java:S1075") // Repository path
+    private static final String JCR_SYSTEM_PATH = "/jcr:system";
+
+    private static final String JCR_SYSTEM_PREFIX = JCR_SYSTEM_PATH + '/';
 
    static final String ALIAS_BASE_QUERY_DEFAULT = "SELECT sling:alias FROM 
nt:base AS page";
 
@@ -816,8 +819,12 @@ public class MapEntries implements
         Map<String, List<MapEntry>> entryMap = new HashMap<>();
 
                 // sling:vanityPath (lowercase) is the property name
-        final String queryString = "SELECT sling:vanityPath, sling:redirect, 
sling:redirectStatus FROM nt:base WHERE sling:vanityPath ="
-                + 
"'"+escapeIllegalXpathSearchChars(vanityPath).replaceAll("'", "''")+"' OR 
sling:vanityPath ="+ 
"'"+escapeIllegalXpathSearchChars(vanityPath.substring(1)).replaceAll("'", 
"''")+"' ORDER BY sling:vanityOrder DESC";
+        final String queryString = "SELECT sling:vanityPath, sling:redirect, 
sling:redirectStatus" +
+            " FROM nt:base" +
+            " WHERE NOT isdescendantnode('" + JCR_SYSTEM_PATH + "') and (" +
+            "sling:vanityPath 
='"+escapeIllegalXpathSearchChars(vanityPath).replaceAll("'", "''")+"'" +
+            " OR sling:vanityPath ="+ 
"'"+escapeIllegalXpathSearchChars(vanityPath.substring(1)).replaceAll("'", 
"''")+"'" +
+            ") ORDER BY sling:vanityOrder DESC";
 
         ResourceResolver queryResolver = null;
 
@@ -1156,7 +1163,10 @@ public class MapEntries implements
     private Map <String, List<String>> loadVanityPaths(boolean 
createVanityBloomFilter) {
         // sling:vanityPath (lowercase) is the property name
         final Map <String, List<String>> targetPaths = new ConcurrentHashMap 
<>();
-        final String queryString = "SELECT sling:vanityPath, sling:redirect, 
sling:redirectStatus FROM nt:base WHERE sling:vanityPath IS NOT NULL";
+        final String queryString = "SELECT sling:vanityPath, sling:redirect, 
sling:redirectStatus" +
+            " FROM nt:base" +
+            " WHERE NOT isdescendantnode('" + JCR_SYSTEM_PATH + "')" +
+            " AND sling:vanityPath IS NOT NULL";
         final Iterator<Resource> i = resolver.findResources(queryString, 
"sql");
 
         Supplier<Boolean> isCacheComplete = () -> 
isAllVanityPathEntriesCached() || vanityCounter.longValue() < 
this.factory.getMaxCachedVanityPathEntries();
diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
index 57ebaeb..235b37a 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/InMemoryResourceProvider.java
@@ -104,7 +104,7 @@ public class InMemoryResourceProvider extends 
ResourceProvider<Void>{
                         .iterator();
                 }
                 
-                if ( "SELECT sling:vanityPath, sling:redirect, 
sling:redirectStatus FROM nt:base WHERE sling:vanityPath IS NOT 
NULL".equals(query) ) {
+                if ( "SELECT sling:vanityPath, sling:redirect, 
sling:redirectStatus FROM nt:base WHERE NOT isdescendantnode('/jcr:system') AND 
sling:vanityPath IS NOT NULL".equals(query) ) {
                     return resourcesWithProperty(ctx, "sling:vanityPath")
                         .iterator();                  
                 }

Reply via email to