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>.