You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2012/10/06 17:24:53 UTC

svn commit: r1395097 - in /commons/proper/net/trunk/src: changes/changes.xml main/java/org/apache/commons/net/util/Base64.java test/java/org/apache/commons/net/util/ test/java/org/apache/commons/net/util/Base64Test.java

Author: sebb
Date: Sat Oct  6 15:24:53 2012
New Revision: 1395097

URL: http://svn.apache.org/viewvc?rev=1395097&view=rev
Log:
NET-483 Base64.encodeBase64(byte[], boolean, boolean, int) does not calculate output size correctly for unchunked output

Added:
    commons/proper/net/trunk/src/test/java/org/apache/commons/net/util/
    commons/proper/net/trunk/src/test/java/org/apache/commons/net/util/Base64Test.java   (with props)
Modified:
    commons/proper/net/trunk/src/changes/changes.xml
    commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/Base64.java

Modified: commons/proper/net/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/changes/changes.xml?rev=1395097&r1=1395096&r2=1395097&view=diff
==============================================================================
--- commons/proper/net/trunk/src/changes/changes.xml (original)
+++ commons/proper/net/trunk/src/changes/changes.xml Sat Oct  6 15:24:53 2012
@@ -66,6 +66,9 @@ The <action> type attribute can be add,u
 This release fixes bugs and adds some new functionality (see below).
  It is binary compatible with previous releases
         ">
+            <action issue="NET-483" dev="sebb" type="fix">
+            Base64.encodeBase64(byte[], boolean, boolean, int) does not calculate output size correctly for unchunked output.
+            </action>
             <action issue="NET-466" dev="sebb" type="fix" due-to="Martin Oberhuber">
             Regression: TelnetInputStream#available() blocks.
             </action>

Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/Base64.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/Base64.java?rev=1395097&r1=1395096&r2=1395097&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/Base64.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/Base64.java Sat Oct  6 15:24:53 2012
@@ -845,7 +845,7 @@ public class Base64 {
             return binaryData;
         }
 
-        long len = getEncodeLength(binaryData, CHUNK_SIZE, CHUNK_SEPARATOR);
+        long len = getEncodeLength(binaryData, isChunked ? CHUNK_SIZE : 0, CHUNK_SEPARATOR);
         if (len > maxResultSize) {
             throw new IllegalArgumentException("Input array too big, the output array would be bigger (" +
                 len +
@@ -1076,4 +1076,13 @@ public class Base64 {
         eof = false;
     }
 
+    // Getters for use in testing
+    
+    int getLineLength() {
+        return lineLength;
+    }
+    
+    byte[] getLineSeparator() {
+        return lineSeparator.clone();
+    }
 }

Added: commons/proper/net/trunk/src/test/java/org/apache/commons/net/util/Base64Test.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/test/java/org/apache/commons/net/util/Base64Test.java?rev=1395097&view=auto
==============================================================================
--- commons/proper/net/trunk/src/test/java/org/apache/commons/net/util/Base64Test.java (added)
+++ commons/proper/net/trunk/src/test/java/org/apache/commons/net/util/Base64Test.java Sat Oct  6 15:24:53 2012
@@ -0,0 +1,213 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ */
+
+package org.apache.commons.net.util;
+
+import static org.junit.Assert.*;
+
+import java.util.Arrays;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class Base64Test {
+
+    @Test
+    public void testBase64() {
+        Base64 b64 = new Base64();
+        assertFalse(b64.isUrlSafe());
+    }
+
+    @Test
+    public void testBase64Boolean() {
+        Base64 b64 = new Base64(true);
+        assertTrue(b64.isUrlSafe());
+        assertTrue(Arrays.equals(new byte[]{'\r','\n'}, b64.getLineSeparator()));
+    }
+
+    @Test
+    public void testBase64Int() {
+        Base64 b64;
+        b64 = new Base64(8);
+        assertFalse(b64.isUrlSafe());
+        assertEquals(8, b64.getLineLength());
+        b64 = new Base64(11);
+        assertEquals(8, b64.getLineLength());
+    }
+
+    @Test
+    public void testBase64IntByteArray() {
+        Base64 b64;
+        b64 = new Base64(8, new byte[]{});
+        assertFalse(b64.isUrlSafe());
+        assertTrue(Arrays.equals(new byte[]{}, b64.getLineSeparator()));
+    }
+
+    @Test
+    public void testBase64IntByteArrayBoolean() {
+        Base64 b64;
+        b64 = new Base64(8, new byte[]{}, false);
+        assertFalse(b64.isUrlSafe());
+        b64 = new Base64(8, new byte[]{}, true);
+        assertTrue(b64.isUrlSafe());
+    }
+
+    @Test
+    public void testIsBase64() {
+        assertTrue(Base64.isBase64((byte)'b'));
+        assertFalse(Base64.isBase64((byte)' '));
+    }
+
+    @Test
+    public void testIsArrayByteBase64() {
+        assertTrue(Base64.isArrayByteBase64(new byte[]{'b',' '}));
+        assertFalse(Base64.isArrayByteBase64(new byte[]{'?'}));
+    }
+
+    @Test
+    public void testEncodeBase64ByteArray() {
+        byte[] binaryData=null;
+        assertTrue(Arrays.equals(binaryData, Base64.encodeBase64(binaryData)));
+    }
+
+    @Test @Ignore
+    public void testEncodeBase64StringByteArray() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testEncodeBase64StringUnChunked() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testEncodeBase64StringByteArrayBoolean() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testEncodeBase64URLSafe() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testEncodeBase64URLSafeString() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testEncodeBase64Chunked() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testDecodeObject() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testDecodeString() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testDecodeByteArray() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testEncodeBase64ByteArrayBoolean() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testEncodeBase64ByteArrayBooleanBoolean() {
+        fail("Not yet implemented");
+    }
+
+    @Test
+    public void testEncodeBase64ByteArrayBooleanBooleanInt() {
+        byte[] binaryData = new byte[]{'1','2','3'};
+        byte[] encoded;
+        encoded = Base64.encodeBase64(binaryData, false, false);
+        assertNotNull(encoded);
+        assertEquals(4, encoded.length);
+        try {
+            Base64.encodeBase64(binaryData, false, false, 3);
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException expected) {
+            // expected
+        }
+        encoded = Base64.encodeBase64(binaryData, false, false, 4); // NET-483
+        assertNotNull(encoded);
+        assertEquals(4, encoded.length);
+        encoded = Base64.encodeBase64(binaryData, true, false);
+        assertNotNull(encoded);
+        assertEquals(6, encoded.length); // always adds trailer
+        try {
+            Base64.encodeBase64(binaryData, true, false, 5);
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException expected) {
+            // expected
+        }
+        encoded = Base64.encodeBase64(binaryData, true, false, 6);
+        assertNotNull(encoded);
+        assertEquals(6, encoded.length);
+    }
+
+    @Test @Ignore
+    public void testDecodeBase64String() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testDecodeBase64ByteArray() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testEncodeObject() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testEncodeToString() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testEncodeByteArray() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testDecodeInteger() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testEncodeInteger() {
+        fail("Not yet implemented");
+    }
+
+    @Test @Ignore
+    public void testToIntegerBytes() {
+        fail("Not yet implemented");
+    }
+
+}

Propchange: commons/proper/net/trunk/src/test/java/org/apache/commons/net/util/Base64Test.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/net/trunk/src/test/java/org/apache/commons/net/util/Base64Test.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision