You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by zh...@apache.org on 2010/05/21 02:14:12 UTC

svn commit: r946834 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/encoding/EncodingDetector.java test/java/org/apache/shindig/gadgets/encoding/EncodingDetectorTest.java

Author: zhoresh
Date: Fri May 21 00:14:12 2010
New Revision: 946834

URL: http://svn.apache.org/viewvc?rev=946834&view=rev
Log:
Fix Array index out of bound exception
http://codereview.appspot.com/1257042/show

Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/encoding/EncodingDetector.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/encoding/EncodingDetectorTest.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/encoding/EncodingDetector.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/encoding/EncodingDetector.java?rev=946834&r1=946833&r2=946834&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/encoding/EncodingDetector.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/encoding/EncodingDetector.java Fri May 21 00:14:12 2010
@@ -32,7 +32,7 @@ public class EncodingDetector {
   private static final Charset UTF_8 = Charset.forName("UTF-8");
   private static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
 
- 
+
   public static class FallbackEncodingDetector {
     public Charset detectEncoding(byte[] input) {
       // Fall back to the incredibly slow ICU. It might be better to just skip this entirely.
@@ -51,7 +51,7 @@ public class EncodingDetector {
    *     encoding for HTTP) if the bytes are not valid UTF-8. Only recommended if you can reasonably
    *     expect that other encodings are going to be specified. Full encoding detection is very
    *     expensive!
-   * @param alternateDecoder specify a fallback encoding detection. 
+   * @param alternateDecoder specify a fallback encoding detection.
    *     Only used if assume88591IfNotUtf8 is false.
    * @return The detected encoding.
    */
@@ -103,11 +103,16 @@ public class EncodingDetector {
         return false;
       }
 
+      if (endOfSequence >= j) {
+        // End of sequence reached, not a valid sequence
+        return false;
+      }
+
       while (i < endOfSequence) {
         i++;
         bite = input[i];
         if ((bite & 0xC0) != 0x80) {
-          // High bit not set, not a vlaid sequence
+          // High bit not set, not a valid sequence
           return false;
         }
       }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/encoding/EncodingDetectorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/encoding/EncodingDetectorTest.java?rev=946834&r1=946833&r2=946834&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/encoding/EncodingDetectorTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/encoding/EncodingDetectorTest.java Fri May 21 00:14:12 2010
@@ -44,7 +44,7 @@ public class EncodingDetectorTest {
     byte[] data = "Hello, world".getBytes("US-ASCII");
     assertEquals("UTF-8", EncodingDetector.detectEncoding(data, true, null).name());
   }
- 
+
   @Test
   public void detectedUtf8WithByteOrderMark() {
     byte[] data = {
@@ -57,7 +57,14 @@ public class EncodingDetectorTest {
   @Test
   public void assumeLatin1OnInvalidUtf8() throws Exception {
     byte[] data = "\u4F60\u597D".getBytes("BIG5");
-    
+
+    assertEquals("ISO-8859-1", EncodingDetector.detectEncoding(data, true, null).name());
+  }
+
+  @Test
+  public void badStreamEnd() throws Exception {
+    byte[] data = { 'd', 'u',  (byte)0xC0 };
+
     assertEquals("ISO-8859-1", EncodingDetector.detectEncoding(data, true, null).name());
   }
 
@@ -68,13 +75,13 @@ public class EncodingDetectorTest {
                    "\u8FBE\u4E0D\u51FA\uFF0C\u6709\u611F\u60C5\u65E0\u6CD5\u503E\u5410")
                    .getBytes("GB18030");
 
-    EncodingDetector.FallbackEncodingDetector detector = 
+    EncodingDetector.FallbackEncodingDetector detector =
       newMockFallbackEncoding(data, "GB18030");
 
     assertEquals("GB18030", EncodingDetector.detectEncoding(data, false, detector).name());
     verify(detector);
   }
-  
+
   // Test the fallback detector:
   @Test
   public void doNotAssumeLatin1OnInvalidUtf8() throws Exception {
@@ -111,7 +118,7 @@ public class EncodingDetectorTest {
 
     assertEquals("UTF-8", detector.detectEncoding(data).name());
   }
-  
+
   @Test(expected=NullPointerException.class)
   public void nullCustomDetector() throws Exception {
     byte[] data = "\u4F60\u597D".getBytes("BIG5");