Author: ggregory Date: Sat Aug 1 08:48:04 2009 New Revision: 799815 URL: http://svn.apache.org/viewvc?rev=799815&view=rev Log: [CODEC-78] Base64: Improve Code Coverage. Patch applied: https://issues.apache.org/jira/secure/attachment/12415223/codec78-evenMoreCoverage.patch
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/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=799815&r1=799814&r2=799815&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 Sat Aug 1 08:48:04 2009 @@ -314,6 +314,10 @@ * @since 1.4 */ public Base64(int lineLength, byte[] lineSeparator, boolean urlSafe) { + if (lineSeparator == null) { + lineLength = 0; // disable chunk-separating + lineSeparator = CHUNK_SEPARATOR; // this just gets ignored + } this.lineLength = lineLength > 0 ? (lineLength / 4) * 4 : 0; this.lineSeparator = new byte[lineSeparator.length]; System.arraycopy(lineSeparator, 0, this.lineSeparator, 0, lineSeparator.length); @@ -957,7 +961,7 @@ if (mod != 0) { len += 4 - mod; } - if (chunkSize > 0 && chunkSeparator != null) { + if (chunkSize > 0) { boolean lenChunksPerfectly = len % chunkSize == 0; len += (len / chunkSize) * chunkSeparator.length; if (!lenChunksPerfectly) { 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=799815&r1=799814&r2=799815&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 Sat Aug 1 08:48:04 2009 @@ -63,6 +63,21 @@ byte[] encodedBytes = Base64.encodeBase64(StringUtils.getBytesUtf8(content)); encodedContent = StringUtils.newStringUtf8(encodedBytes); assertTrue("encoding hello world", encodedContent.equals("SGVsbG8gV29ybGQ=")); + + Base64 b64 = new Base64(76, null); // null lineSeparator same as saying no-chunking + encodedBytes = b64.encode(StringUtils.getBytesUtf8(content)); + encodedContent = StringUtils.newStringUtf8(encodedBytes); + assertTrue("encoding hello world", encodedContent.equals("SGVsbG8gV29ybGQ=")); + + b64 = new Base64(0, null); // null lineSeparator same as saying no-chunking + encodedBytes = b64.encode(StringUtils.getBytesUtf8(content)); + encodedContent = StringUtils.newStringUtf8(encodedBytes); + assertTrue("encoding hello world", encodedContent.equals("SGVsbG8gV29ybGQ=")); + + // bogus characters to decode (to skip actually) + byte[] decode = b64.decode("SGVsbG{éééééé}8gV29ybGQ="); + String decodeString = StringUtils.newStringUtf8(decode); + assertTrue("decode hello world", decodeString.equals("Hello World")); } /**