You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:00:53 UTC

[sling-org-apache-sling-resourceresolver] 09/24: SLING-2741 - Bad Vanity URL breaks whole Sling Resource Resolver :

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

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

commit 07d2172165f4cf56e679f79ec5260dea2c71319c
Author: Antonio Sanso <as...@apache.org>
AuthorDate: Mon Feb 25 08:47:02 2013 +0000

    SLING-2741 - Bad Vanity URL breaks whole Sling Resource Resolver  :
    
    - applied patch
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/resourceresolver@1449619 13f79535-47bb-0310-9956-ffa450edef68
---
 .../resourceresolver/impl/mapping/MapEntries.java  | 43 +++++++++++++++++-----
 .../resourceresolver/impl/mapping/MapEntry.java    |  9 ++++-
 .../impl/mapping/MapEntriesTest.java               |  7 ++++
 3 files changed, 48 insertions(+), 11 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 7a5ff94..59fbd8e 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
@@ -462,6 +462,9 @@ public class MapEntries implements EventHandler {
      * Add an entry to the resolve map.
      */
     private void addEntry(final Map<String, List<MapEntry>> entryMap, final String key, final MapEntry entry) {
+    	if (entry==null){
+    		return;
+    	}
         List<MapEntry> entries = entryMap.get(key);
         if (entries == null) {
             entries = new ArrayList<MapEntry>();
@@ -588,19 +591,19 @@ public class MapEntries implements EventHandler {
 
                         if (redirectName.indexOf('.') > -1) {
                             // 1. entry with exact match
-                            this.addEntry(entryMap, checkPath, new MapEntry(url + "$", status, false, redirect));
+                            this.addEntry(entryMap, checkPath, getMapEntry(url + "$", status, false, redirect));
 
                             final int idx = redirectName.lastIndexOf('.');
                             final String extension = redirectName.substring(idx + 1);
 
                             // 2. entry with extension
-                            this.addEntry(entryMap, checkPath, new MapEntry(url + "\\." + extension, status, false, redirect));
+                            this.addEntry(entryMap, checkPath, getMapEntry(url + "\\." + extension, status, false, redirect));
                         } else {
                             // 1. entry with exact match
-                            this.addEntry(entryMap, checkPath, new MapEntry(url + "$", status, false, redirect + ".html"));
+                            this.addEntry(entryMap, checkPath, getMapEntry(url + "$", status, false, redirect + ".html"));
 
                             // 2. entry with match supporting selectors and extension
-                            this.addEntry(entryMap, checkPath, new MapEntry(url + "(\\..*)", status, false, redirect + "$1"));
+                            this.addEntry(entryMap, checkPath, getMapEntry(url + "(\\..*)", status, false, redirect + "$1"));
                         }
                         // 3. keep the path to return
                         targetPaths.add(redirect);
@@ -666,7 +669,10 @@ public class MapEntries implements EventHandler {
                     // this regular expression must match the whole URL !!
                     final String url = "^" + ANY_SCHEME_HOST + extPath + "$";
                     final String redirect = intPath;
-                    entries.add(new MapEntry(url, -1, false, redirect));
+                    MapEntry mapEntry = getMapEntry(url, -1, false, redirect);
+                    if (mapEntry!=null){
+                    	entries.add(mapEntry);
+                    }
                 }
             }
         }
@@ -691,7 +697,10 @@ public class MapEntries implements EventHandler {
             }
 
             for (final Entry<String, List<String>> entry : map.entrySet()) {
-                entries.add(new MapEntry(ANY_SCHEME_HOST + entry.getKey(), -1, false, entry.getValue().toArray(new String[0])));
+            	MapEntry mapEntry = getMapEntry(ANY_SCHEME_HOST + entry.getKey(), -1, false, entry.getValue().toArray(new String[0]));
+            	if (mapEntry!=null){
+            		entries.add(mapEntry);
+            	}
             }
         }
     }
@@ -731,15 +740,17 @@ public class MapEntries implements EventHandler {
     private void addMapEntry(final Map<String, MapEntry> entries, final String path, final String url, final int status) {
         MapEntry entry = entries.get(path);
         if (entry == null) {
-            entry = new MapEntry(path, status, false, url);
+            entry = getMapEntry(path, status, false, url);
         } else {
             final String[] redir = entry.getRedirect();
             final String[] newRedir = new String[redir.length + 1];
             System.arraycopy(redir, 0, newRedir, 0, redir.length);
             newRedir[redir.length] = url;
-            entry = new MapEntry(entry.getPattern(), entry.getStatus(), false, newRedir);
+            entry = getMapEntry(entry.getPattern(), entry.getStatus(), false, newRedir);
+        }
+        if (entry!=null){
+        	entries.put(path, entry);
         }
-        entries.put(path, entry);
     }
 
     /**
@@ -866,4 +877,18 @@ public class MapEntries implements EventHandler {
             }
         }
     };
+    
+    private MapEntry getMapEntry(String url, final int status, final boolean trailingSlash,
+            final String... redirect){
+    	
+    	MapEntry mapEntry = null;
+    	try{
+    		mapEntry = new MapEntry(url, status, trailingSlash, redirect);
+    	}catch (IllegalArgumentException iae){
+    		//ignore this entry
+    		log.debug("ignored entry due exception ",iae);
+    	}    	
+    	return mapEntry;
+    }
+    
 }
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntry.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntry.java
index b215e65..0259cd9 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntry.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntry.java
@@ -237,8 +237,13 @@ public class MapEntry implements Comparable<MapEntry> {
         if (!url.startsWith("^")) {
             url = "^".concat(url);
         }
-
-        this.urlPattern = Pattern.compile(url);
+        
+        try {
+        	this.urlPattern = Pattern.compile(url);
+        } catch (Exception e){
+        	throw new IllegalArgumentException("Bad url ",e);
+        }
+        
         this.redirect = redirect;
         this.status = status;
     }
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
index 8f9540a..299f4a4 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
@@ -150,6 +150,13 @@ public class MapEntriesTest {
         when(justVanityPath.getName()).thenReturn("justVanityPath");
         when(justVanityPath.adaptTo(ValueMap.class)).thenReturn(buildValueMap("sling:vanityPath", "/target/justVanityPath"));
         resources.add(justVanityPath);
+        
+        Resource badVanityPath = mock(Resource.class);
+        when(badVanityPath.getPath()).thenReturn("/badVanityPath");
+        when(badVanityPath.getName()).thenReturn("badVanityPath");
+        when(badVanityPath.adaptTo(ValueMap.class)).thenReturn(buildValueMap("sling:vanityPath", "/content/mypage/en-us-{132"));
+        resources.add(badVanityPath);
+                
 
         Resource redirectingVanityPath = mock(Resource.class);
         when(redirectingVanityPath.getPath()).thenReturn("/redirectingVanityPath");

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.