The original bug was reported against TC4 so I have ported the patch in order to close the bug report. TC4 does not include the uRLEncoding parameter on the connector so I have implemented the queryStringEncoding parameter as Remy previously suggested. To make TC5 consistent with TC4, I have added the queryStringEncoding parameter to TC5 and modified CoyoteAdapter to use this new parameter. All the patches can be found below. Please could someone (Remy?) commit them.
Thanks, Mark PS I also removed some unused imports - thanks Eclipse :) On Sunday, September 07, 2003 3:40 PM, Remy Maucherat [SMTP:[EMAIL PROTECTED] wrote: > Mark Thomas wrote: > > On Sunday, September 07, 2003 8:47 AM, Remy Maucherat [SMTP:[EMAIL PROTECTED] > > > > wrote: > > > >>Remy Maucherat wrote: > >> > >>I've just committed a very simple implementation of this (without the > >>extra queryStringEncoding field, although this is not hard to add). > >>Comments ? > >> > >>Remy TC4 patches Index: util/java/org/apache/tomcat/util/buf/MessageBytes.java =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/b uf/MessageBytes.java,v retrieving revision 1.7 diff -u -r1.7 MessageBytes.java --- util/java/org/apache/tomcat/util/buf/MessageBytes.java 12 Jul 2002 18:00:14 -0000 1.7 +++ util/java/org/apache/tomcat/util/buf/MessageBytes.java 27 Sep 2003 11:54:38 -0000 @@ -285,6 +285,7 @@ toString(); char cc[]=strValue.toCharArray(); charC.setChars(cc, 0, cc.length); + type=T_CHARS; } Index: util/java/org/apache/tomcat/util/http/Parameters.java =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/h ttp/Parameters.java,v retrieving revision 1.8.2.1 diff -u -r1.8.2.1 Parameters.java --- util/java/org/apache/tomcat/util/http/Parameters.java 5 Apr 2003 08:19:28 -0000 1.8.2.1 +++ util/java/org/apache/tomcat/util/http/Parameters.java 27 Sep 2003 11:55:31 -0000 @@ -63,7 +63,6 @@ import org.apache.tomcat.util.collections.MultiMap; import java.io.*; import java.util.*; -import java.text.*; /** * @@ -97,7 +96,8 @@ private Parameters currentChild=null; String encoding=null; - + String queryStringEncoding=null; + /** * */ @@ -118,6 +118,11 @@ if(debug>0) log( "Set encoding to " + s ); } + public void setQueryStringEncoding( String s ) { + queryStringEncoding=s; + if(debug>0) log( "Set query string encoding to " + s ); + } + public void recycle() { super.recycle(); paramHashStringArray.clear(); @@ -278,22 +283,33 @@ public void handleQueryParameters() { if( didQueryParameters ) return; - if( queryMB != null) - queryMB.setEncoding( encoding ); didQueryParameters=true; - if( debug > 0 ) - log( "Decoding query " + queryMB + " " + encoding); if( queryMB==null || queryMB.isNull() ) return; try { - decodedQuery.duplicate( queryMB ); - decodedQuery.setEncoding(encoding); + decodedQuery.duplicate( queryMB ); + if (queryStringEncoding == null) { + ByteChunk bc = decodedQuery.getByteChunk(); + CharChunk cc = decodedQuery.getCharChunk(); + cc.allocate(bc.getLength(), -1); + // Default encoding: fast conversion + byte[] bbuf = bc.getBuffer(); + char[] cbuf = cc.getBuffer(); + int start = bc.getStart(); + for (int i = 0; i < bc.getLength(); i++) { + cbuf[i] = (char) (bbuf[i + start] & 0xff); + } + decodedQuery.setChars(cbuf, 0, bc.getLength()); + } else { + decodedQuery.setEncoding(queryStringEncoding); + decodedQuery.toChars(); + } } catch( IOException ex ) { } if( debug > 0 ) - log( "Decoding query " + decodedQuery + " " + encoding); + log( "Decoding query " + decodedQuery + " " + queryStringEncoding); processParameters( decodedQuery ); } Index: coyote/src/java/org/apache/coyote/tomcat4/CoyoteConnector.java =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/ tomcat4/CoyoteConnector.java,v retrieving revision 1.20.2.2 diff -u -r1.20.2.2 CoyoteConnector.java --- coyote/src/java/org/apache/coyote/tomcat4/CoyoteConnector.java 28 Apr 2003 17:21:16 -0000 1.20.2.2 +++ coyote/src/java/org/apache/coyote/tomcat4/CoyoteConnector.java 27 Sep 2003 11:56:34 -0000 @@ -343,6 +343,11 @@ private Adapter adapter = null; + /** + * Query encoding. + */ + private String queryStringEncoding = null; + // ------------------------------------------------------------- Properties @@ -932,6 +937,26 @@ } + /** + * Return the character encoding to be used for the query. + */ + public String getQueryStringEncoding() { + + return (this.queryStringEncoding); + + } + + + /** + * Set the query encoding to be used for the URI. + * + * @param queryStringEncoding The new URI query character encoding. + */ + public void setQueryStringEncoding(String QueryEncoding) { + + this.queryStringEncoding = QueryEncoding; + + } /** * Return the value of the Uri validation flag. Index: coyote/src/java/org/apache/coyote/tomcat4/CoyoteAdapter.java =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/ tomcat4/CoyoteAdapter.java,v retrieving revision 1.13.2.5 diff -u -r1.13.2.5 CoyoteAdapter.java --- coyote/src/java/org/apache/coyote/tomcat4/CoyoteAdapter.java 29 Jul 2003 17:19:29 -0000 1.13.2.5 +++ coyote/src/java/org/apache/coyote/tomcat4/CoyoteAdapter.java 27 Sep 2003 11:57:16 -0000 @@ -64,53 +64,23 @@ package org.apache.coyote.tomcat4; -import java.io.BufferedInputStream; -import java.io.EOFException; -import java.io.InterruptedIOException; -import java.io.InputStream; import java.io.IOException; -import java.io.OutputStream; -import java.net.InetAddress; -import java.net.Socket; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.Locale; -import java.util.StringTokenizer; -import java.util.TreeMap; -import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.tomcat.util.buf.ByteChunk; -import org.apache.tomcat.util.buf.HexUtils; import org.apache.tomcat.util.buf.MessageBytes; import org.apache.tomcat.util.http.Cookies; import org.apache.tomcat.util.http.ServerCookie; import org.apache.coyote.ActionCode; -import org.apache.coyote.ActionHook; import org.apache.coyote.Adapter; -import org.apache.coyote.InputBuffer; -import org.apache.coyote.OutputBuffer; import org.apache.coyote.Request; import org.apache.coyote.Response; -import org.apache.catalina.Connector; -import org.apache.catalina.Container; import org.apache.catalina.Globals; -import org.apache.catalina.HttpRequest; -import org.apache.catalina.HttpResponse; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.LifecycleEvent; -import org.apache.catalina.LifecycleException; -import org.apache.catalina.LifecycleListener; import org.apache.catalina.Logger; -import org.apache.catalina.util.LifecycleSupport; -import org.apache.catalina.util.RequestUtil; import org.apache.catalina.util.StringManager; -import org.apache.catalina.util.StringParser; /** @@ -212,6 +182,10 @@ // Set as notes req.setNote(ADAPTER_NOTES, request); res.setNote(ADAPTER_NOTES, response); + + // Set query string encoding + req.getParameters().setQueryStringEncoding + (connector.getQueryStringEncoding()); } TC5 Patches Index: catalina/src/share/org/apache/coyote/tomcat5/CoyoteConnector.java =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-catalina/catalina/src/share/org/apache/coyote /tomcat5/CoyoteConnector.java,v retrieving revision 1.28 diff -u -r1.28 CoyoteConnector.java --- catalina/src/share/org/apache/coyote/tomcat5/CoyoteConnector.java 2 Sep 2003 21:21:59 -0000 1.28 +++ catalina/src/share/org/apache/coyote/tomcat5/CoyoteConnector.java 27 Sep 2003 11:59:30 -0000 @@ -364,6 +364,12 @@ private String URIEncoding = null; + /** + * Query encoding. + */ + private String queryStringEncoding = null; + + // ------------------------------------------------------------- Properties /** @@ -1089,6 +1095,28 @@ setProperty("uRIEncoding", URIEncoding); } + + + /** + * Return the character encoding to be used for the query. + */ + public String getQueryStringEncoding() { + + return (this.queryStringEncoding); + + } + + + /** + * Set the query encoding to be used for the URI. + * + * @param queryStringEncoding The new URI query character encoding. + */ + public void setQueryStringEncoding(String QueryEncoding) { + + this.queryStringEncoding = QueryEncoding; + + } /** Index: catalina/src/share/org/apache/coyote/tomcat5/CoyoteAdapter.java =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-catalina/catalina/src/share/org/apache/coyote /tomcat5/CoyoteAdapter.java,v retrieving revision 1.13 diff -u -r1.13 CoyoteAdapter.java --- catalina/src/share/org/apache/coyote/tomcat5/CoyoteAdapter.java 18 Sep 2003 22:20:51 -0000 1.13 +++ catalina/src/share/org/apache/coyote/tomcat5/CoyoteAdapter.java 27 Sep 2003 12:00:02 -0000 @@ -189,7 +189,7 @@ // Set query string encoding req.getParameters().setQueryStringEncoding - (connector.getURIEncoding()); + (connector.getQueryStringEncoding()); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]