Author: markt
Date: Sat Mar  2 22:14:03 2013
New Revision: 1451950

URL: http://svn.apache.org/r1451950
Log:
Check to see if JVM's UTF-8 decoder handles invalid sequences better if 
endOfInput is true (it does).

Modified:
    tomcat/trunk/test/org/apache/tomcat/websocket/TestUtf8.java

Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TestUtf8.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestUtf8.java?rev=1451950&r1=1451949&r2=1451950&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestUtf8.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestUtf8.java Sat Mar  2 
22:14:03 2013
@@ -92,19 +92,19 @@ public class TestUtf8 {
     public void testJvmDecoder1() {
         // This should trigger an error but currently passes. Once the JVM is
         // fixed, s/false/true/ and s/20/13/
-        doJvmDecoder(SRC_BYTES_1, false, 20);
+        doJvmDecoder(SRC_BYTES_1, false, false, 20);
     }
 
 
     @Test
     public void testJvmDecoder2() {
         // Ideally should fail after 2 bytes (i==1)
-        doJvmDecoder(SRC_BYTES_2, true, 3);
+        doJvmDecoder(SRC_BYTES_2, false, true, 3);
     }
 
 
-    private void doJvmDecoder(byte[] src, boolean errorExpected,
-            int failPosExpected) {
+    private void doJvmDecoder(byte[] src, boolean endOfinput,
+            boolean errorExpected, int failPosExpected) {
         CharsetDecoder decoder = B2CConverter.UTF_8.newDecoder()
                 .onMalformedInput(CodingErrorAction.REPORT)
                 .onUnmappableCharacter(CodingErrorAction.REPORT);
@@ -118,7 +118,7 @@ public class TestUtf8 {
         for (; i < src.length; i++) {
             bb.put(src[i]);
             bb.flip();
-            CoderResult cr = decoder.decode(bb, cb, false);
+            CoderResult cr = decoder.decode(bb, cb, endOfinput);
             if (cr.isError()) {
                 error = true;
                 break;
@@ -142,18 +142,18 @@ public class TestUtf8 {
 
     @Test
     public void testHarmonyDecoder1() {
-        doHarmonyDecoder(SRC_BYTES_1, true, 13);
+        doHarmonyDecoder(SRC_BYTES_1, false, true, 13);
     }
 
 
     @Test
     public void testHarmonyDecoder2() {
-        doHarmonyDecoder(SRC_BYTES_2, true, 1);
+        doHarmonyDecoder(SRC_BYTES_2, false, true, 1);
     }
 
 
-    private void doHarmonyDecoder(byte[] src, boolean errorExpected,
-            int failPosExpected) {
+    private void doHarmonyDecoder(byte[] src, boolean endOfinput,
+            boolean errorExpected, int failPosExpected) {
         CharsetDecoder decoder = new Utf8Decoder();
 
         ByteBuffer bb = ByteBuffer.allocate(src.length);
@@ -164,7 +164,7 @@ public class TestUtf8 {
         for (; i < src.length; i++) {
             bb.put(src[i]);
             bb.flip();
-            CoderResult cr = decoder.decode(bb, cb, false);
+            CoderResult cr = decoder.decode(bb, cb, endOfinput);
             if (cr.isError()) {
                 error = true;
                 break;
@@ -190,19 +190,31 @@ public class TestUtf8 {
     public void testUtf8MalformedJvm() {
         for (int i = 0 ; i < MALFORMED.length; i++) {
             // Known failures
+            // JVM UTF-8 decoder spots invalid sequences but not if they occur
+            // at the end of the input and endOfInput is not true
             if (i == 1 || i == 6 || i == 14 | i == 22) {
-                doJvmDecoder(MALFORMED[i], false, -1);
+                doJvmDecoder(MALFORMED[i], false, false, -1);
             } else {
-                doJvmDecoder(MALFORMED[i], true, -1);
+                doJvmDecoder(MALFORMED[i], false, true, -1);
             }
         }
     }
 
 
     @Test
+    public void testUtf8MalformedJvm2() {
+        // JVM UTF-8 decoder spots invalid sequences but not if they occur at
+        // the end of the input and endOfInput is not true
+        for (int i = 0 ; i < MALFORMED.length; i++) {
+            doJvmDecoder(MALFORMED[i], true, true, -1);
+        }
+    }
+
+
+    @Test
     public void testUtf8MalformedHarmony() {
         for (byte[] input : MALFORMED) {
-            doHarmonyDecoder(input, true, -1);
+            doHarmonyDecoder(input, false, true, -1);
         }
     }
 }



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

Reply via email to