You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2003/12/11 22:35:24 UTC

cvs commit: jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat4 CoyoteAdapter.java

markt       2003/12/11 13:35:24

  Modified:    coyote/src/java/org/apache/coyote/tomcat4 CoyoteAdapter.java
  Log:
  - Fix bug 24283. Process uri as characters not bytes to ensure correct handling of unicode characters.
  
  Revision  Changes    Path
  1.24      +36 -24    jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat4/CoyoteAdapter.java
  
  Index: CoyoteAdapter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat4/CoyoteAdapter.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- CoyoteAdapter.java	19 Nov 2003 23:23:18 -0000	1.23
  +++ CoyoteAdapter.java	11 Dec 2003 21:35:24 -0000	1.24
  @@ -69,6 +69,7 @@
   import javax.servlet.http.HttpServletRequest;
   
   import org.apache.tomcat.util.buf.ByteChunk;
  +import org.apache.tomcat.util.buf.CharChunk;
   import org.apache.tomcat.util.buf.MessageBytes;
   import org.apache.tomcat.util.http.Cookies;
   import org.apache.tomcat.util.http.ServerCookie;
  @@ -299,14 +300,14 @@
           parseCookies(req, request);
   
           // Set the SSL properties
  -	if( request.isSecure() ) {
  -	    res.action(ActionCode.ACTION_REQ_SSL_ATTRIBUTE,
  +        if( request.isSecure() ) {
  +            res.action(ActionCode.ACTION_REQ_SSL_ATTRIBUTE,
                          request.getCoyoteRequest());
  -	    //Set up for getAttributeNames
  -	    request.getAttribute(Globals.CERTIFICATES_ATTR);
  -	    request.getAttribute(Globals.CIPHER_SUITE_ATTR);
  -	    request.getAttribute(Globals.KEY_SIZE_ATTR);
  -	}
  +            //Set up for getAttributeNames
  +            request.getAttribute(Globals.CERTIFICATES_ATTR);
  +            request.getAttribute(Globals.CIPHER_SUITE_ATTR);
  +            request.getAttribute(Globals.KEY_SIZE_ATTR);
  +        }
   
           // Set the remote principal
           String principal = req.getRemoteUser().toString();
  @@ -322,31 +323,42 @@
        */
       protected void parseSessionId(Request req, CoyoteRequest request) {
   
  -        ByteChunk uriBC = req.decodedURI().getByteChunk();
  -        int semicolon = uriBC.indexOf(match, 0, match.length(), 0);
  +        req.decodedURI().toChars();
  +        CharChunk uriCC = req.decodedURI().getCharChunk();
  +        int semicolon = uriCC.indexOf(match, 0, match.length(), 0);
   
           if (semicolon > 0) {
   
               // Parse session ID, and extract it from the decoded request URI
  -            String uri = uriBC.toString();
  -            String rest = uri.substring(semicolon + match.length());
  -            int semicolon2 = rest.indexOf(';');
  +            int start = uriCC.getStart();
  +            int end = uriCC.getEnd();
  +
  +            int sessionIdStart = start + semicolon + match.length();
  +            int semicolon2 = uriCC.indexOf(';', sessionIdStart);
               if (semicolon2 >= 0) {
  -                request.setRequestedSessionId(rest.substring(0, semicolon2));
  -                rest = rest.substring(semicolon2);
  +                request.setRequestedSessionId
  +                    (new String(uriCC.getBuffer(), sessionIdStart, 
  +                                semicolon2 - semicolon - match.length()));
  +                req.decodedURI().setString
  +                    (new String(uriCC.getBuffer(), start, semicolon) + 
  +                            new String(uriCC.getBuffer(),
  +                                        semicolon2,
  +                                        end-semicolon2));
               } else {
  -                request.setRequestedSessionId(rest);
  -                rest = "";
  +                request.setRequestedSessionId
  +                    (new String(uriCC.getBuffer(), sessionIdStart, 
  +                                end - sessionIdStart));
  +                req.decodedURI().setString
  +                    (new String(uriCC.getBuffer(), start, semicolon));
               }
               request.setRequestedSessionURL(true);
  -            req.decodedURI().setString(uri.substring(0, semicolon) + rest);
   
               // Extract session ID from request URI
  -            uri = req.requestURI().toString();
  +            String uri = req.requestURI().toString();
               semicolon = uri.indexOf(match);
   
               if (semicolon > 0) {
  -                rest = uri.substring(semicolon + match.length());
  +                String rest = uri.substring(semicolon + match.length());
                   semicolon2 = rest.indexOf(';');
                   if (semicolon2 >= 0) {
                       rest = rest.substring(semicolon2);
  @@ -376,7 +388,7 @@
   
           Cookie[] cookies = new Cookie[count];
   
  -	int idx=0;
  +        int idx=0;
           for (int i = 0; i < count; i++) {
               ServerCookie scookie = serverCookies.getCookie(i);
               if (scookie.getName().equals(Globals.SESSION_COOKIE_NAME)) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Re: cvs commit: jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat4 CoyoteAdapter.java

Posted by Remy Maucherat <re...@apache.org>.
Remy Maucherat wrote:
> markt@apache.org wrote:
> 
>> markt       2003/12/11 13:35:24
>>
>>   Modified:    coyote/src/java/org/apache/coyote/tomcat4 
>> CoyoteAdapter.java
>>   Log:
>>   - Fix bug 24283. Process uri as characters not bytes to ensure 
>> correct handling of unicode characters.
> 
> 
> -1 for this patch. Character decoding should occur afterwards. Mapping 
> should be done as bytes.

Oops, forget it, I thought this was in the TC 5 branch.
I need to think before pressing send.

Rémy



---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Re: cvs commit: jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat4 CoyoteAdapter.java

Posted by Remy Maucherat <re...@apache.org>.
markt@apache.org wrote:

> markt       2003/12/11 13:35:24
> 
>   Modified:    coyote/src/java/org/apache/coyote/tomcat4 CoyoteAdapter.java
>   Log:
>   - Fix bug 24283. Process uri as characters not bytes to ensure correct handling of unicode characters.

-1 for this patch. Character decoding should occur afterwards. Mapping 
should be done as bytes.

Rémy



---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org