You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2016/12/29 09:52:59 UTC

lucene-solr:apiv2: SOLR-8029: avoid infinite loop

Repository: lucene-solr
Updated Branches:
  refs/heads/apiv2 03eca9c11 -> b55e25a99


SOLR-8029: avoid infinite loop


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/b55e25a9
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/b55e25a9
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/b55e25a9

Branch: refs/heads/apiv2
Commit: b55e25a9900f15db1c5ffbb2f2eb1f09c831f56f
Parents: 03eca9c
Author: Noble Paul <no...@apache.org>
Authored: Thu Dec 29 20:22:40 2016 +1030
Committer: Noble Paul <no...@apache.org>
Committed: Thu Dec 29 20:22:40 2016 +1030

----------------------------------------------------------------------
 .../apache/solr/common/util/ValidatingJsonMap.java  | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b55e25a9/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java b/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
index 95318af..7d007f0 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
@@ -249,7 +249,7 @@ public class ValidatingJsonMap implements Map<String, Object> {
   public static ValidatingJsonMap fromJSON(Reader s, String includeLocation) {
     try {
       ValidatingJsonMap map = (ValidatingJsonMap)getObjectBuilder(new JSONParser(s)).getObject();
-      handleIncludes(map, includeLocation);
+      handleIncludes(map, includeLocation, 4);
       return map;
     } catch (IOException e) {
       throw new RuntimeException();
@@ -260,17 +260,21 @@ public class ValidatingJsonMap implements Map<String, Object> {
    * In the given map, recursively replace "#include":"resource-name" with the key/value pairs 
    * parsed from the resource at {location}/{resource-name}.json
    */
-  private static void handleIncludes(ValidatingJsonMap map, String location) {
+  private static void handleIncludes(ValidatingJsonMap map, String location, int maxDepth) {
     final String loc = location == null ? "" // trim trailing slash
-        : (location.endsWith("/") ? location.substring(0, location.length() - 1) : location); 
-    String resourceToInclude = (String)map.get(INCLUDE);
+        : (location.endsWith("/") ? location.substring(0, location.length() - 1) : location);
+    String resourceToInclude = (String) map.get(INCLUDE);
     if (resourceToInclude != null) {
       ValidatingJsonMap includedMap = parse(loc + "/" + resourceToInclude + RESOURCE_EXTENSION, loc);
       map.remove(INCLUDE);
       map.putAll(includedMap);
     }
-    map.entrySet().stream().filter(e->e.getValue() instanceof Map).map(Map.Entry::getValue)
-        .forEach(m->handleIncludes((ValidatingJsonMap)m, loc));
+    if (maxDepth > 0) {
+      map.entrySet().stream()
+          .filter(e -> e.getValue() instanceof Map)
+          .map(Map.Entry::getValue)
+          .forEach(m -> handleIncludes((ValidatingJsonMap) m, loc, maxDepth - 1));
+    }
   }
 
   public static ValidatingJsonMap getDeepCopy(Map map, int maxDepth, boolean mutable) {