Reviewers: Dan Rice, Description: Cookies weren't being escaped despite uriEscaping being set. This addresses the problem and adds to the tests.
Please review this at http://gwt-code-reviews.appspot.com/128801 Affected files: user/src/com/google/gwt/user/client/Cookies.java user/test/com/google/gwt/user/client/CookieTest.java Index: user/test/com/google/gwt/user/client/CookieTest.java =================================================================== --- user/test/com/google/gwt/user/client/CookieTest.java (revision 7348) +++ user/test/com/google/gwt/user/client/CookieTest.java (working copy) @@ -151,7 +151,24 @@ Cookies.removeCookie("test1+test1"); cookies = Cookies.getCookieNames(); assertEquals(curCount, cookies.size()); + + // Make sure cookie names are URI encoded + Cookies.setUriEncode(true); + Cookies.setCookie("test1.,/?:@&=+$#", "value1"); + assertEquals(curCount + 1, Cookies.getCookieNames().size()); + Cookies.setUriEncode(false); + Cookies.removeCookie("test1.,/?:@&=+$#"); + assertEquals(curCount + 1, Cookies.getCookieNames().size()); + Cookies.setUriEncode(true); + Cookies.removeCookie("test1.,/?:@&=+$#"); + assertEquals(curCount, Cookies.getCookieNames().size()); + // Make sure cookie values are URI encoded + Cookies.setCookie("testencodedvalue", "value1,/?:@&=+$#"); + Cookies.setUriEncode(false); + String encodedValue = Cookies.getCookie("testencodedvalue"); + assertTrue(encodedValue.compareTo("value1%2C%2F%3F%3A%40%26%3D%2B%24%23") == 0); + // Make sure unencoded cookies with bogus format are not added try { Cookies.setCookie("test1=test1", "value1"); Index: user/src/com/google/gwt/user/client/Cookies.java =================================================================== --- user/src/com/google/gwt/user/client/Cookies.java (revision 7348) +++ user/src/com/google/gwt/user/client/Cookies.java (working copy) @@ -110,9 +110,11 @@ */ public static void removeCookie(String name) { if (uriEncoding) { - uriEncode(name); + removeCookieNative(uriEncode(name)); } - removeCookieNative(name); + else { + removeCookieNative(name); + } } /** @@ -124,9 +126,11 @@ */ public static void removeCookie(String name, String path) { if (uriEncoding) { - uriEncode(name); + removeCookieNative(uriEncode(name), path); } - removeCookieNative(name, path); + else { + removeCookieNative(name, path); + } } /** @@ -174,8 +178,8 @@ public static void setCookie(String name, String value, Date expires, String domain, String path, boolean secure) { if (uriEncoding) { - uriEncode(name); - uriEncode(value); + name = uriEncode(name); + value = uriEncode(value); } else if (!isValidCookieName(name) || !isValidCookieValue(value)) { throw new IllegalArgumentException("Illegal cookie format."); } -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
