Author: cbrisson Date: Tue Jun 26 00:47:22 2018 New Revision: 1834387 URL: http://svn.apache.org/viewvc?rev=1834387&view=rev Log: [tools] fix VELTOOLS-168 - LinkTool internal query should only contain scalars or Lists, never arrays
Modified: velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/LinkTool.java Modified: velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/LinkTool.java URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/LinkTool.java?rev=1834387&r1=1834386&r2=1834387&view=diff ============================================================================== --- velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/LinkTool.java (original) +++ velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/LinkTool.java Tue Jun 26 00:47:22 2018 @@ -20,6 +20,7 @@ package org.apache.velocity.tools.generi */ import java.io.UnsupportedEncodingException; +import java.lang.reflect.Array; import java.net.URI; import java.net.URLDecoder; import java.net.URLEncoder; @@ -27,6 +28,7 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.velocity.tools.Scope; import org.apache.velocity.tools.ToolContext; @@ -439,7 +441,35 @@ public class LinkTool extends SafeConfig } else if (obj instanceof Map) { - this.query = new LinkedHashMap((Map)obj); + this.query = new LinkedHashMap(); + for (Map.Entry keyValues : (Set<Map.Entry>)((Map)obj).entrySet()) + { + String key = String.valueOf(keyValues.getKey()); + Object values = keyValues.getValue(); + if (values.getClass().isArray()) + { + int size = Array.getLength(values); + switch (size) + { + case 0: + break; + case 1: + this.query.put(key, Array.get(values, 0)); + break; + default: + List lst = new ArrayList(); + for (int i = 0; i < Array.getLength(values); ++i) + { + lst.add(Array.get(values, i)); + } + this.query.put(key, lst); + } + } + else + { + this.query.put(key, values); + } + } } else {