we're copying bytes to two new byte arrays on every call, just so that we have info when it fails? especially only logged with debugEnabled, shouldn't your logic check that flag then
Filip

ma...@apache.org wrote:
Author: markt
Date: Fri Jun 19 21:14:32 2009
New Revision: 786667

URL: http://svn.apache.org/viewvc?rev=786667&view=rev
Log:
Can't use queryMB as that isn't the only source.

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/http/Parameters.java

Modified: tomcat/trunk/java/org/apache/tomcat/util/http/Parameters.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/Parameters.java?rev=786667&r1=786666&r2=786667&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/http/Parameters.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/http/Parameters.java Fri Jun 19 
21:14:32 2009
@@ -338,6 +338,8 @@
     // if needed
     ByteChunk tmpName=new ByteChunk();
     ByteChunk tmpValue=new ByteChunk();
+    ByteChunk origName=new ByteChunk();
+    ByteChunk origValue=new ByteChunk();
     CharChunk tmpNameC=new CharChunk(1024);
     CharChunk tmpValueC=new CharChunk(1024);
@@ -396,18 +398,25 @@
             }
             tmpName.setBytes( bytes, nameStart, nameEnd-nameStart );
             tmpValue.setBytes( bytes, valStart, valEnd-valStart );
-
+            try {
+                // Take copies as if anything goes wrong originals will be
+                // corrupted. This means original values can be logged
+                origName.append(bytes, nameStart, nameEnd-nameStart);
+                origValue.append(bytes, valStart, valEnd-valStart);
+            } catch (IOException ioe) {
+                // Should never happen...
+                log.error("Error copying parameters", ioe);
+            }
+ try {
                 addParam( urlDecode(tmpName, enc), urlDecode(tmpValue, enc) );
             } catch (IOException e) {
-                // tmpName or tmpValue will be corrupted at this point due to
-                // failed decoding. Have to go to queryMB to get original data
                 StringBuilder msg =
                     new StringBuilder("Parameters: Character decoding 
failed.");
                 msg.append(" Parameter '");
-                msg.append(queryMB.toString().substring(nameStart, nameEnd));
+                msg.append(origName.toString());
                 msg.append("' with value '");
-                msg.append(queryMB.toString().substring(valStart, valEnd));
+                msg.append(origValue.toString());
                 msg.append("' has been ignored.");
                 if (log.isDebugEnabled()) {
                     log.debug(msg, e);
@@ -418,7 +427,8 @@
tmpName.recycle();
             tmpValue.recycle();
-
+            origName.recycle();
+            origValue.recycle();
         } while( pos<end );
     }


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




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

Reply via email to