Hey Joel,

Would you take a look at this patch, against the trunk at r5321, which
switches Window.Location's decode methods to use URL.decodeComponent
instead of just URL.decode? It also adds some testing in WindowTest to
make sure the decoding goes as expected.

This should fix issue 2941.

Thanks!

-- 
Alex Rudnick
swe, gwt, atl

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Index: user/test/com/google/gwt/user/client/WindowTest.java
===================================================================
--- user/test/com/google/gwt/user/client/WindowTest.java	(revision 5321)
+++ user/test/com/google/gwt/user/client/WindowTest.java	(working copy)
@@ -116,6 +116,11 @@
     assertEquals(map.get("d").get(0), "d=d");
     assertEquals(map.get("f").get(0), "2");
     assertEquals(map.get("f").get(1), "1");
+
+    // Values escaped with hex codes should work too.
+    map = Window.Location.buildListParamMap(
+    "?foo=bar%20baz%3aqux");
+    assertEquals(map.get("foo").get(0), "bar baz:qux");
   }
 
   /**
Index: user/src/com/google/gwt/user/client/Window.java
===================================================================
--- user/src/com/google/gwt/user/client/Window.java	(revision 5321)
+++ user/src/com/google/gwt/user/client/Window.java	(working copy)
@@ -270,7 +270,7 @@
             values = new ArrayList<String>();
             out.put(kv[0], values);
           }
-          values.add(kv.length > 1 ? URL.decode(kv[1]) : "");
+          values.add(kv.length > 1 ? URL.decodeComponent(kv[1]) : "");
         }
       }
 
@@ -292,7 +292,7 @@
           for (String kvPair : qs.split("&")) {
             String[] kv = kvPair.split("=", 2);
             if (kv.length > 1) {
-              paramMap.put(kv[0], URL.decode(kv[1]));
+              paramMap.put(kv[0], URL.decodeComponent(kv[1]));
             } else {
               paramMap.put(kv[0], "");
             }

Reply via email to