You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@joshua.apache.org by mj...@apache.org on 2017/03/03 20:57:38 UTC
incubator-joshua git commit: bugfix: URL string was being decoded
twice
Repository: incubator-joshua
Updated Branches:
refs/heads/master d86c3441b -> 8a8655bca
bugfix: URL string was being decoded twice
HttpExchange.getRequestURI().getQuery() returns a partially-decoded query string, e.g., %25 is transformed to a linefeed. Previously, we again called URLDecoder.decode() to decode each argument. This was only problematic in particular situations where special characters were encoded. It should now be fixed.
Project: http://git-wip-us.apache.org/repos/asf/incubator-joshua/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-joshua/commit/8a8655bc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-joshua/tree/8a8655bc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-joshua/diff/8a8655bc
Branch: refs/heads/master
Commit: 8a8655bcaa71683a0fd371dda535e432beac9563
Parents: d86c344
Author: Matt Post <po...@cs.jhu.edu>
Authored: Fri Mar 3 15:57:35 2017 -0500
Committer: Matt Post <po...@cs.jhu.edu>
Committed: Fri Mar 3 15:57:35 2017 -0500
----------------------------------------------------------------------
.../org/apache/joshua/server/ServerThread.java | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8a8655bc/src/main/java/org/apache/joshua/server/ServerThread.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/joshua/server/ServerThread.java b/src/main/java/org/apache/joshua/server/ServerThread.java
index 49dd3c6..c3297d1 100644
--- a/src/main/java/org/apache/joshua/server/ServerThread.java
+++ b/src/main/java/org/apache/joshua/server/ServerThread.java
@@ -119,13 +119,17 @@ public class ServerThread extends Thread implements HttpHandler {
*/
public HashMap<String, ArrayList<String>> queryToMap(String query) throws UnsupportedEncodingException {
HashMap<String, ArrayList<String>> result = new HashMap<>();
+ if (LOG.isDebugEnabled())
+ LOG.debug("Got RESTful query: " + query);
for (String param : query.split("&")) {
- int pos = param.indexOf('=');
- String key = URLDecoder.decode((pos != -1) ? param.substring(0, pos) : param, "UTF-8");
- String val = URLDecoder.decode((pos != -1) ? param.substring(pos+1) : "", "UTF-8");
- if (! result.containsKey(key))
- result.put(key, new ArrayList<String>());
- result.get(key).add(URLDecoder.decode(val, "UTF-8"));
+ int pos = param.indexOf('=');
+ String key = URLDecoder.decode((pos != -1) ? param.substring(0, pos) : param, "UTF-8");
+ String val = URLDecoder.decode((pos != -1) ? param.substring(pos+1) : "", "UTF-8");
+ if (LOG.isDebugEnabled())
+ LOG.debug(" -> Got {} = {}", key, val);
+ if (! result.containsKey(key))
+ result.put(key, new ArrayList<String>());
+ result.get(key).add(val);
}
return result;
}
@@ -171,7 +175,7 @@ public class ServerThread extends Thread implements HttpHandler {
@Override
public synchronized void handle(HttpExchange client) throws IOException {
- HashMap<String, ArrayList<String>> params = queryToMap(client.getRequestURI().getQuery());
+ HashMap<String, ArrayList<String>> params = queryToMap(client.getRequestURI().getRawQuery());
ArrayList<String> queryList = params.get("q");
ArrayList<String> metaList = params.get("meta");
String meta = (metaList != null && ! metaList.isEmpty()) ? metaList.get(metaList.size() - 1) : null;