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;