[jboss-svn-commits] JBL Code SVN: r6011 - labs/jbossweb/trunk/src/share/classes/org/apache/catalina/connector
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Aug 29 17:47:12 EDT 2006
Author: remy.maucherat at jboss.com
Date: 2006-08-29 17:47:11 -0400 (Tue, 29 Aug 2006)
New Revision: 6011
Modified:
labs/jbossweb/trunk/src/share/classes/org/apache/catalina/connector/CoyoteAdapter.java
Log:
- Port rework of ';' handling in the URL.
Modified: labs/jbossweb/trunk/src/share/classes/org/apache/catalina/connector/CoyoteAdapter.java
===================================================================
--- labs/jbossweb/trunk/src/share/classes/org/apache/catalina/connector/CoyoteAdapter.java 2006-08-29 21:45:52 UTC (rev 6010)
+++ labs/jbossweb/trunk/src/share/classes/org/apache/catalina/connector/CoyoteAdapter.java 2006-08-29 21:47:11 UTC (rev 6011)
@@ -22,7 +22,6 @@
import org.apache.catalina.Context;
import org.apache.catalina.Globals;
import org.apache.catalina.Wrapper;
-import org.apache.catalina.util.ServerInfo;
import org.apache.catalina.util.StringManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -138,7 +137,6 @@
if (connector.getXpoweredBy()) {
response.addHeader("X-Powered-By", "Servlet/2.4");
- response.addHeader("X-Powered-By", ServerInfo.getEscapedServerInfo());
}
try {
@@ -207,11 +205,21 @@
req.serverName().setString(proxyName);
}
+ // Parse session Id
+ parseSessionId(req, request);
+
// URI decoding
MessageBytes decodedURI = req.decodedURI();
decodedURI.duplicate(req.requestURI());
if (decodedURI.getType() == MessageBytes.T_BYTES) {
+ // Remove any path parameters
+ ByteChunk uriBB = decodedURI.getByteChunk();
+ int semicolon = uriBB.indexOf(';', 0);
+ if (semicolon > 0) {
+ decodedURI.setBytes
+ (uriBB.getBuffer(), uriBB.getStart(), semicolon);
+ }
// %xx decoding of the URL
try {
req.getURLDecoder().convert(decodedURI, false);
@@ -233,6 +241,13 @@
// protocol handler, we have to assume the URL has been properly
// decoded already
decodedURI.toChars();
+ // Remove any path parameters
+ CharChunk uriCC = decodedURI.getCharChunk();
+ int semicolon = uriCC.indexOf(';');
+ if (semicolon > 0) {
+ decodedURI.setChars
+ (uriCC.getBuffer(), uriCC.getStart(), semicolon);
+ }
}
// Set the remote principal
@@ -247,19 +262,6 @@
request.setAuthType(authtype);
}
- // Parse session Id
- parseSessionId(req, request);
-
- // Remove any remaining parameters (other than session id, which has
- // already been removed in parseSessionId()) from the URI, so they
- // won't be considered by the mapping algorithm.
- CharChunk uriCC = decodedURI.getCharChunk();
- int semicolon = uriCC.indexOf(';');
- if (semicolon > 0) {
- decodedURI.setChars
- (uriCC.getBuffer(), uriCC.getStart(), semicolon);
- }
-
// Request mapping.
MessageBytes serverName;
if (connector.getUseIPVHosts()) {
@@ -334,50 +336,36 @@
*/
protected void parseSessionId(org.apache.coyote.Request req, Request request) {
- CharChunk uriCC = req.decodedURI().getCharChunk();
- int semicolon = uriCC.indexOf(match, 0, match.length(), 0);
+ ByteChunk uriBC = req.requestURI().getByteChunk();
+ int semicolon = uriBC.indexOf(match, 0, match.length(), 0);
if (semicolon > 0) {
// Parse session ID, and extract it from the decoded request URI
- int start = uriCC.getStart();
- int end = uriCC.getEnd();
+ int start = uriBC.getStart();
+ int end = uriBC.getEnd();
- int sessionIdStart = start + semicolon + match.length();
- int semicolon2 = uriCC.indexOf(';', sessionIdStart);
+ int sessionIdStart = semicolon + match.length();
+ int semicolon2 = uriBC.indexOf(';', sessionIdStart);
if (semicolon2 >= 0) {
request.setRequestedSessionId
- (new String(uriCC.getBuffer(), sessionIdStart,
- semicolon2 - semicolon - match.length()));
+ (new String(uriBC.getBuffer(), start + sessionIdStart,
+ semicolon2 - sessionIdStart));
+ // Extract session ID from request URI
+ byte[] buf = uriBC.getBuffer();
+ for (int i = 0; i < end - start - semicolon2; i++) {
+ buf[start + semicolon + i]
+ = buf[start + i + semicolon2];
+ }
+ uriBC.setBytes(buf, start, end - start - semicolon2 + semicolon);
} else {
request.setRequestedSessionId
- (new String(uriCC.getBuffer(), sessionIdStart,
- end - sessionIdStart));
+ (new String(uriBC.getBuffer(), start + sessionIdStart,
+ (end - start) - sessionIdStart));
+ uriBC.setEnd(start + semicolon);
}
request.setRequestedSessionURL(true);
- // Extract session ID from request URI
- ByteChunk uriBC = req.requestURI().getByteChunk();
- start = uriBC.getStart();
- end = uriBC.getEnd();
- semicolon = uriBC.indexOf(match, 0, match.length(), 0);
-
- if (semicolon > 0) {
- sessionIdStart = start + semicolon;
- semicolon2 = uriCC.indexOf
- (';', start + semicolon + match.length());
- uriBC.setEnd(start + semicolon);
- byte[] buf = uriBC.getBuffer();
- if (semicolon2 >= 0) {
- for (int i = 0; i < end - start - semicolon2; i++) {
- buf[start + semicolon + i]
- = buf[start + i + semicolon2];
- }
- uriBC.setBytes(buf, start, semicolon
- + (end - start - semicolon2));
- }
- }
-
} else {
request.setRequestedSessionId(null);
request.setRequestedSessionURL(false);
More information about the jboss-svn-commits
mailing list