You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2015/10/25 15:38:29 UTC
[1/2] wicket git commit: WICKET-6010 UrlEncoder#FULL_PATH is no
longer used in Wicket
Repository: wicket
Updated Branches:
refs/heads/WICKET-6010-url-encoder [created] 0be6a8de7
WICKET-6010 UrlEncoder#FULL_PATH is no longer used in Wicket
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/a4578cea
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/a4578cea
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/a4578cea
Branch: refs/heads/WICKET-6010-url-encoder
Commit: a4578ceac5723c581a84871726e308252073309f
Parents: 52f4ec4
Author: Sven Meier <sv...@apache.org>
Authored: Fri Oct 23 12:48:55 2015 +0200
Committer: Sven Meier <sv...@apache.org>
Committed: Fri Oct 23 12:48:55 2015 +0200
----------------------------------------------------------------------
.../apache/wicket/util/encoding/UrlEncoder.java | 37 ++------------------
.../wicket/util/encoding/UrlEncoderTest.java | 4 +--
2 files changed, 4 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/a4578cea/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java b/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java
index fb26bc4..d03b7f1 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java
@@ -49,11 +49,7 @@ public class UrlEncoder
/**
* path type
*/
- PATH,
- /**
- * full path type
- */
- FULL_PATH
+ PATH
}
// list of what not to decode
@@ -79,16 +75,6 @@ public class UrlEncoder
public static final UrlEncoder PATH_INSTANCE = new UrlEncoder(Type.PATH);
/**
- * Encoder used to encode all path segments. Querystring will be excluded.<br/>
- * <br/>
- *
- * For example: http://org.acme/foo/thispart/orthispart?butnot=thispart
- */
- public static final UrlEncoder FULL_PATH_INSTANCE = new UrlEncoder(Type.FULL_PATH);
-
- private final Type type;
-
- /**
* Allow subclass to call constructor.
*
* @param type
@@ -144,7 +130,6 @@ public class UrlEncoder
* query =( pchar / "/" / "?" )
*/
- this.type = type;
// unreserved
dontNeedEncoding = new BitSet(256);
int i;
@@ -216,18 +201,6 @@ public class UrlEncoder
// don't encode semicolon because it is used in ;jsessionid=
dontNeedEncoding.set(';');
break;
-
- // same as path, but '/' will not be encoded
- case FULL_PATH :
- // encode ' ' with a % instead of + in path portion
-
- // path component sub-delim values we do not need to escape
- dontNeedEncoding.set('&');
- dontNeedEncoding.set('=');
- dontNeedEncoding.set('+');
-
- dontNeedEncoding.set('/');
- break;
}
}
@@ -270,18 +243,12 @@ public class UrlEncoder
throw new RuntimeException(new UnsupportedEncodingException(charsetName));
}
- boolean stopEncoding = false;
for (int i = 0; i < s.length();)
{
int c = s.charAt(i);
- if ((stopEncoding == false) && (c == '?' && type == Type.FULL_PATH))
- {
- stopEncoding = true;
- }
-
// System.out.println("Examining character: " + c);
- if (stopEncoding || dontNeedEncoding.get(c))
+ if (dontNeedEncoding.get(c))
{
if (c == ' ')
{
http://git-wip-us.apache.org/repos/asf/wicket/blob/a4578cea/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java b/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java
index 3691c74..4cc3971 100644
--- a/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java
+++ b/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java
@@ -36,7 +36,7 @@ public class UrlEncoderTest extends Assert
public void encodeApostrophe()
{
assertEquals("someone%27s%20bad%20url",
- UrlEncoder.FULL_PATH_INSTANCE.encode("someone's bad url", CharEncoding.UTF_8));
+ UrlEncoder.PATH_INSTANCE.encode("someone's bad url", CharEncoding.UTF_8));
}
/**
@@ -56,6 +56,6 @@ public class UrlEncoderTest extends Assert
public void dontStopOnNullByte() throws Exception
{
assertEquals("someone%27s%20badNULL%20url",
- UrlEncoder.FULL_PATH_INSTANCE.encode("someone's bad\0 url", CharEncoding.UTF_8));
+ UrlEncoder.PATH_INSTANCE.encode("someone's bad\0 url", CharEncoding.UTF_8));
}
}
[2/2] wicket git commit: WCKET-6010 new encoder for header
Posted by sv...@apache.org.
WCKET-6010 new encoder for header
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/0be6a8de
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/0be6a8de
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/0be6a8de
Branch: refs/heads/WICKET-6010-url-encoder
Commit: 0be6a8de76b29ebe295f601b3b78cd9db253e93b
Parents: a4578ce
Author: Sven Meier <sv...@apache.org>
Authored: Fri Oct 23 19:27:02 2015 +0200
Committer: Sven Meier <sv...@apache.org>
Committed: Fri Oct 23 19:40:45 2015 +0200
----------------------------------------------------------------------
.../http/servlet/ServletWebResponseTest.java | 4 +-
.../apache/wicket/request/http/WebResponse.java | 2 +-
.../apache/wicket/util/encoding/UrlEncoder.java | 87 ++++++++++++--------
.../wicket/util/encoding/UrlEncoderTest.java | 42 ++++++++++
4 files changed, 98 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/0be6a8de/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebResponseTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebResponseTest.java b/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebResponseTest.java
index 5c5e9eb..e9fd4fa 100644
--- a/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebResponseTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebResponseTest.java
@@ -130,10 +130,10 @@ public class ServletWebResponseTest extends Assert
HttpServletResponse httpResponse = new MockHttpServletResponse(httpRequest);
ServletWebResponse response = new ServletWebResponse(webRequest, httpResponse);
- response.setInlineHeader("name with spaces");
+ response.setInlineHeader("name with spaces and;,");
String header = httpResponse.getHeader("Content-Disposition");
assertEquals(
- "inline; filename=\"name%20with%20spaces\"; filename*=UTF-8''name%20with%20spaces",
+ "inline; filename=\"name%20with%20spaces%20and%3B%2C\"; filename*=UTF-8''name%20with%20spaces%20and%3B%2C",
header);
// says: "name with bulgarian"
http://git-wip-us.apache.org/repos/asf/wicket/blob/0be6a8de/wicket-request/src/main/java/org/apache/wicket/request/http/WebResponse.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/http/WebResponse.java b/wicket-request/src/main/java/org/apache/wicket/request/http/WebResponse.java
index a790d0b..4183940 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/http/WebResponse.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/http/WebResponse.java
@@ -175,7 +175,7 @@ public abstract class WebResponse extends Response
{
return (Strings.isEmpty(filename) ? "" : String.format(
"; filename=\"%1$s\"; filename*=UTF-8''%1$s",
- UrlEncoder.PATH_INSTANCE.encode(filename, "UTF-8")));
+ UrlEncoder.HEADER_INSTANCE.encode(filename, "UTF-8")));
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/0be6a8de/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java b/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java
index d03b7f1..85b18bd 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/encoding/UrlEncoder.java
@@ -42,17 +42,15 @@ public class UrlEncoder
* encoder types
*/
public enum Type {
- /**
- * query type
- */
QUERY,
- /**
- * path type
- */
- PATH
+ PATH,
+ HEADER
}
- // list of what not to decode
+ /**
+ * List of what not to encode, i.e. characters (e.g. A-Z) and other allowed signs (e.g. !)
+ * that are allowed but don't have a special meaning.
+ */
protected BitSet dontNeedEncoding;
// used in decoding
@@ -67,7 +65,7 @@ public class UrlEncoder
public static final UrlEncoder QUERY_INSTANCE = new UrlEncoder(Type.QUERY);
/**
- * Encoder used to encode components of a path.<br/>
+ * Encoder used to encode segments of a path.<br/>
* <br/>
*
* For example: http://org.acme/foo/thispart/orthispart?butnot=thispart
@@ -75,6 +73,11 @@ public class UrlEncoder
public static final UrlEncoder PATH_INSTANCE = new UrlEncoder(Type.PATH);
/**
+ * Encoder used to encode a header.
+ */
+ public static final UrlEncoder HEADER_INSTANCE = new UrlEncoder(Type.HEADER);
+
+ /**
* Allow subclass to call constructor.
*
* @param type
@@ -154,29 +157,25 @@ public class UrlEncoder
// sub-delims
dontNeedEncoding.set('!');
dontNeedEncoding.set('$');
- // "&" needs to be encoded for query stings
- // "(" and ")" probably don't need encoding, but we'll be conservative
- dontNeedEncoding.set('*');
- // "+" needs to be encoded for query strings (since it means =
- dontNeedEncoding.set(',');
- // ";" encoded due to use in path and/or query as delim in some
- // instances (e.g., jsessionid)
- // "=" needs to be encoded for query strings
-
- // pchar
- dontNeedEncoding.set(':'); // allowed and used in wicket interface
- // params
- dontNeedEncoding.set('@');
// encoding type-specific
switch (type)
{
- // this code consistent with java.net.URLEncoder version
case QUERY :
+ // this code consistent with java.net.URLEncoder version#
+
// encoding a space to a + is done in the encode() method
dontNeedEncoding.set(' ');
- // to allow direct passing of URL in query
- dontNeedEncoding.set('/');
+
+ // sub-delims continued
+ dontNeedEncoding.set('*');
+ dontNeedEncoding.set('/'); // to allow direct passing of URL in query
+ dontNeedEncoding.set(',');
+ // "'" doesn't need encoding, but it will make it easier to use in in JavaScript
+ // "(" and ")" don't need encoding, but we'll be conservative
+
+ dontNeedEncoding.set(':'); // allowed and used in wicket interface
+ dontNeedEncoding.set('@');
/*
* the below encoding of a ? is disabled because it interferes in portlet
@@ -185,21 +184,41 @@ public class UrlEncoder
* re-enable it as portlet environments are not high priority. we can also add a
* switch somewhere to enable/disable this on applicaiton level. (WICKET-4019)
*/
-
- // to allow direct passing of URL in query
- // dontNeedEncoding.set('?');
+ // dontNeedEncoding.set('?'); // to allow direct passing of URL in query
break;
- // this added to deal with encoding a PATH component
case PATH :
- // encode ' ' with a % instead of + in path portion
-
- // path component sub-delim values we do not need to escape
+ // this added to deal with encoding a PATH segment
+
+ // sub-delims continued
+ dontNeedEncoding.set('*');
dontNeedEncoding.set('&');
+ dontNeedEncoding.set('+');
+ // "'" doesn't need encoding, but it will make it easier to use in in JavaScript
+ // "(" and ")" don't need encoding, but we'll be conservative
+ dontNeedEncoding.set(',');
+ dontNeedEncoding.set(';'); // semicolon is used in ;jsessionid=
dontNeedEncoding.set('=');
+
+ dontNeedEncoding.set(':'); // allowed and used in wicket interface
+ dontNeedEncoding.set('@');
+
+ break;
+
+ // this added to deal with encoding a PATH component
+ case HEADER :
+ // this added to deal with encoding of header
+
+ // ' ' is encoded
+
+ // sub-delims continued
+ dontNeedEncoding.set('#');
+ dontNeedEncoding.set('&');
dontNeedEncoding.set('+');
- // don't encode semicolon because it is used in ;jsessionid=
- dontNeedEncoding.set(';');
+
+ dontNeedEncoding.set('^');
+ dontNeedEncoding.set('`');
+ dontNeedEncoding.set('|');
break;
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/0be6a8de/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java b/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java
index 4cc3971..b002e1f 100644
--- a/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java
+++ b/wicket-util/src/test/java/org/apache/wicket/util/encoding/UrlEncoderTest.java
@@ -27,6 +27,48 @@ import org.junit.Test;
public class UrlEncoderTest extends Assert
{
+ // starts with ä
+ private static final char[] encodingCandidates = "\u00c4!\"§$%&/()=?`*'_:;><,.-#+´\\}][{|".toCharArray();
+
+ @Test
+ public void pathUnencoded() {
+ String unencoded = "azAZ09.-_~!$&*+,;=:@";
+
+ assertEquals(unencoded, UrlEncoder.PATH_INSTANCE.encode(unencoded, CharEncoding.UTF_8));
+
+ for (char candidate : encodingCandidates) {
+ if (unencoded.indexOf(candidate) == -1) {
+ assertNotEquals("" + candidate, UrlEncoder.PATH_INSTANCE.encode("" + candidate, CharEncoding.UTF_8));
+ }
+ }
+ }
+
+ @Test
+ public void queryStringUnencoded() {
+ String unencoded = "azAZ09.-_~!$*,:@/";
+
+ assertEquals(unencoded, UrlEncoder.QUERY_INSTANCE.encode(unencoded, CharEncoding.UTF_8));
+
+ for (char candidate : encodingCandidates) {
+ if (unencoded.indexOf(candidate) == -1) {
+ assertNotEquals("" + candidate, UrlEncoder.QUERY_INSTANCE.encode("" + candidate, CharEncoding.UTF_8));
+ }
+ }
+ }
+
+ @Test
+ public void headerUnencoded() {
+ String unencoded = "azAZ09.-_~!$&+#^`|";
+
+ assertEquals(unencoded, UrlEncoder.HEADER_INSTANCE.encode(unencoded, CharEncoding.UTF_8));
+
+ for (char candidate : encodingCandidates) {
+ if (unencoded.indexOf(candidate) == -1) {
+ assertNotEquals("" + candidate, UrlEncoder.HEADER_INSTANCE.encode("" + candidate, CharEncoding.UTF_8));
+ }
+ }
+ }
+
/**
* <a href="https://issues.apache.org/jira/browse/WICKET-3721">WICKET-3721</a> Encode
* apostrophes because otherwise they get XML encoded by ComponentTag#writeOutput() to