Skip to content

Commit b57a1ae

Browse files
author
Julius Davies
committed
Fix for CODEC-101: java.io.InputStreamReader hates it when InputStream.read(byte[]) returns a zero. (Adding an extra JUnit Test for good luck.)
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/codec/trunk@1061980 13f79535-47bb-0310-9956-ffa450edef68
1 parent d74fc31 commit b57a1ae

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

src/test/org/apache/commons/codec/binary/Base64InputStreamTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717

1818
package org.apache.commons.codec.binary;
1919

20+
import java.io.BufferedReader;
2021
import java.io.ByteArrayInputStream;
2122
import java.io.InputStream;
23+
import java.io.InputStreamReader;
2224
import java.util.Arrays;
2325

2426
import junit.framework.TestCase;
@@ -64,6 +66,35 @@ public void testCodec101() throws Exception {
6466
assertTrue("Codec101: Second read should report end-of-stream [c=" + c + "]", c < 0);
6567
}
6668

69+
/**
70+
* Another test for the CODEC-101 bug:
71+
* In commons-codec-1.4 this test shows InputStreamReader explicitly hating an
72+
* InputStream.read(byte[]) return of 0:
73+
*
74+
* java.io.IOException: Underlying input stream returned zero bytes
75+
* at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:268)
76+
* at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
77+
* at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
78+
* at java.io.InputStreamReader.read(InputStreamReader.java:167)
79+
* at java.io.BufferedReader.fill(BufferedReader.java:136)
80+
* at java.io.BufferedReader.readLine(BufferedReader.java:299)
81+
* at java.io.BufferedReader.readLine(BufferedReader.java:362)
82+
* at org.apache.commons.codec.binary.Base64InputStreamTest.testInputStreamReader(Base64InputStreamTest.java:75)
83+
*
84+
* But in commons-codec-1.5 it's fixed. :-)
85+
*
86+
* @throws Exception for some failure scenarios.
87+
*/
88+
public void testInputStreamReader() throws Exception {
89+
byte[] codec101 = StringUtils.getBytesUtf8(Base64TestData.CODEC_101_MULTIPLE_OF_3);
90+
ByteArrayInputStream bais = new ByteArrayInputStream(codec101);
91+
Base64InputStream in = new Base64InputStream(bais);
92+
InputStreamReader isr = new InputStreamReader(in);
93+
BufferedReader br = new BufferedReader(isr);
94+
String line = br.readLine();
95+
assertNotNull("Codec101: InputStreamReader works!", line);
96+
}
97+
6798
/**
6899
* Test the Base64InputStream implementation against the special NPE inducing input
69100
* identified in the CODEC-98 bug.

0 commit comments

Comments
 (0)