Author: markt Date: Thu Feb 28 22:37:14 2013 New Revision: 1451408 URL: http://svn.apache.org/r1451408 Log: Add test for size of leftover buffer and increase buffer size to support more character sets
Modified: tomcat/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java tomcat/trunk/test/org/apache/tomcat/util/buf/TestB2CConverter.java Modified: tomcat/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java?rev=1451408&r1=1451407&r2=1451408&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/buf/B2CConverter.java Thu Feb 28 22:37:14 2013 @@ -43,6 +43,9 @@ public class B2CConverter { public static final Charset ISO_8859_1; public static final Charset UTF_8; + // Protected so unit tests can use it + protected static final int LEFTOVER_SIZE = 9; + static { for (Charset charset: Charset.availableCharsets().values()) { encodingToCharsetCache.put( @@ -100,7 +103,7 @@ public class B2CConverter { private final ByteBuffer leftovers; public B2CConverter(String encoding) throws IOException { - byte[] left = new byte[4]; + byte[] left = new byte[LEFTOVER_SIZE]; leftovers = ByteBuffer.wrap(left); decoder = getCharset(encoding).newDecoder(); } Modified: tomcat/trunk/test/org/apache/tomcat/util/buf/TestB2CConverter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/buf/TestB2CConverter.java?rev=1451408&r1=1451407&r2=1451408&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/tomcat/util/buf/TestB2CConverter.java (original) +++ tomcat/trunk/test/org/apache/tomcat/util/buf/TestB2CConverter.java Thu Feb 28 22:37:14 2013 @@ -16,6 +16,8 @@ */ package org.apache.tomcat.util.buf; +import java.nio.charset.Charset; + import org.junit.Assert; import org.junit.Test; @@ -57,4 +59,28 @@ public class TestB2CConverter { System.out.println(cc); } + + @Test + public void testLeftoverSize() { + float maxLeftover = 0; + for (Charset charset : Charset.availableCharsets().values()) { + float leftover; + if (charset.name().toLowerCase().startsWith("x-")) { + // Non-standard charset that browsers won't be using + // Likely something used internally by the JRE + continue; + } + try { + leftover = charset.newEncoder().maxBytesPerChar(); + } catch (UnsupportedOperationException uoe) { + // Skip it + continue; + } + if (leftover > maxLeftover) { + maxLeftover = leftover; + } + } + Assert.assertTrue("Limit needs to be at least " + maxLeftover, + maxLeftover <= B2CConverter.LEFTOVER_SIZE); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org