Apply Remy's patch for 44494 for multi-byte character data.
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Sun, 30 Mar 2008 21:13:36 +0000 (21:13 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Sun, 30 Mar 2008 21:13:36 +0000 (21:13 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@642819 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/tomcat/util/buf/B2CConverter.java

index cb67cfe..7a12098 100644 (file)
@@ -77,34 +77,28 @@ public class B2CConverter {
         convert(bb, cb, cb.getBuffer().length - cb.getEnd());
     }
 
+
     public void convert( ByteChunk bb, CharChunk cb, int limit) 
         throws IOException
     {
         iis.setByteChunk( bb );
-        convert(cb, limit);
-    }
-
-    private void convert(CharChunk cb, int limit)
-        throws IOException
-    {
         try {
             // read from the reader
+            int bbLengthBeforeRead = 0;
             while( limit > 0 ) { // conv.ready() ) {
                 int size = limit < BUFFER_SIZE ? limit : BUFFER_SIZE;
+                bbLengthBeforeRead = bb.getLength();
                 int cnt=conv.read( result, 0, size );
                 if( cnt <= 0 ) {
                     // End of stream ! - we may be in a bad state
                     if( debug>0)
                         log( "EOF" );
-                    //                    reset();
                     return;
                 }
                 if( debug > 1 )
                     log("Converted: " + new String( result, 0, cnt ));
-
-                // XXX go directly
                 cb.append( result, 0, cnt );
-                limit -= cnt;
+                limit = limit - (bbLengthBeforeRead - bb.getLength());
             }
         } catch( IOException ex) {
             if( debug>0)
@@ -114,6 +108,7 @@ public class B2CConverter {
         }
     }
 
+
     public void reset()
         throws IOException
     {