Author: ggregory
Date: Mon Jul 13 22:33:28 2009
New Revision: 793734

URL: http://svn.apache.org/viewvc?rev=793734&view=rev
Log:
[CODEC-77] Base64 bug with empty input (new byte[0])

Modified:
    
commons/proper/codec/trunk/src/java/org/apache/commons/codec/binary/Base64.java
    
commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64InputStreamTest.java
    
commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64OutputStreamTest.java
    
commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64Test.java

Modified: 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/binary/Base64.java
URL: 
http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/java/org/apache/commons/codec/binary/Base64.java?rev=793734&r1=793733&r2=793734&view=diff
==============================================================================
--- 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/binary/Base64.java 
(original)
+++ 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/binary/Base64.java 
Mon Jul 13 22:33:28 2009
@@ -443,7 +443,7 @@
                     }
                     break;
             }
-            if (lineLength > 0) {
+            if (lineLength > 0 && pos > 0) {
                 System.arraycopy(lineSeparator, 0, buf, pos, 
lineSeparator.length);
                 pos += lineSeparator.length;
             }

Modified: 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64InputStreamTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64InputStreamTest.java?rev=793734&r1=793733&r2=793734&view=diff
==============================================================================
--- 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64InputStreamTest.java
 (original)
+++ 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64InputStreamTest.java
 Mon Jul 13 22:33:28 2009
@@ -43,6 +43,18 @@
     }
 
     /**
+     * Test the Base64InputStream implementation against empty input.
+     *
+     * @throws Exception for some failure scenarios.
+     */    
+    public void testBase64EmptyInputStream() throws Exception {
+        byte[] emptyEncoded = new byte[0];
+        byte[] emptyDecoded = new byte[0];
+        testByteByByte(emptyEncoded, emptyDecoded, 76, CRLF);
+        testByChunk(emptyEncoded, emptyDecoded, 76, CRLF);
+    }
+
+    /**
      * Test the Base64InputStream implementation.
      *
      * @throws Exception for some failure scenarios.

Modified: 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64OutputStreamTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64OutputStreamTest.java?rev=793734&r1=793733&r2=793734&view=diff
==============================================================================
--- 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64OutputStreamTest.java
 (original)
+++ 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64OutputStreamTest.java
 Mon Jul 13 22:33:28 2009
@@ -43,11 +43,23 @@
     }
 
     /**
+     * Test the Base64OutputStream implementation against empty input.
+     *
+     * @throws Exception for some failure scenarios.
+     */
+    public void testBase64EmptyOutputStream() throws Exception {
+        byte[] emptyEncoded = new byte[0];
+        byte[] emptyDecoded = new byte[0];
+        testByteByByte(emptyEncoded, emptyDecoded, 76, CRLF);
+        testByChunk(emptyEncoded, emptyDecoded, 76, CRLF);
+    }    
+
+    /**
      * Test the Base64OutputStream implementation
      *
      * @throws Exception for some failure scenarios.
      */
-    public void testBase64InputStreamByteByByte() throws Exception {
+    public void testBase64OutputStreamByteByByte() throws Exception {
         // Hello World test.
         byte[] encoded = "SGVsbG8gV29ybGQ=\r\n".getBytes("UTF-8");
         byte[] decoded = "Hello World".getBytes("UTF-8");
@@ -75,7 +87,7 @@
      *
      * @throws Exception for some failure scenarios.
      */
-    public void testBase64InputStreamByChunk() throws Exception {
+    public void testBase64OutputStreamByChunk() throws Exception {
         // Hello World test.
         byte[] encoded = "SGVsbG8gV29ybGQ=\r\n".getBytes("UTF-8");
         byte[] decoded = "Hello World".getBytes("UTF-8");

Modified: 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64Test.java
URL: 
http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64Test.java?rev=793734&r1=793733&r2=793734&view=diff
==============================================================================
--- 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64Test.java
 (original)
+++ 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/binary/Base64Test.java
 Mon Jul 13 22:33:28 2009
@@ -29,7 +29,7 @@
 import junit.framework.TestCase;
 
 /**
- * Testcases for Base64 class.
+ * Test cases for Base64 class.
  * 
  * @author Apache Software Foundation
  * @version $Id$
@@ -830,6 +830,19 @@
         }
     }
 
+    /**
+     * Test encode and decode of empty byte array.
+     */
+    public void testEmptyBase64() {
+        byte[] empty = new byte[0];
+        byte[] result = Base64.encodeBase64(empty);
+        assertEquals("empty base64 encode", 0, result.length);
+
+        empty = new byte[0];
+        result = Base64.decodeBase64(empty);        
+        assertEquals("empty base64 decode", 0, result.length);        
+    }
+
     // -------------------------------------------------------- Private Methods
 
     private String toString(byte[] data) {


Reply via email to