You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "ZAK Magnus (JIRA)" <ji...@apache.org> on 2010/08/13 18:45:17 UTC
[jira] Created: (CODEC-105) ArrayIndexOutOfBoundsException when
doing multiple reads() on encoding b64InputStream
ArrayIndexOutOfBoundsException when doing multiple reads() on encoding b64InputStream
-------------------------------------------------------------------------------------
Key: CODEC-105
URL: https://issues.apache.org/jira/browse/CODEC-105
Project: Commons Codec
Issue Type: Bug
Affects Versions: 1.4
Environment: 64-bit Linux
Reporter: ZAK Magnus
When encoding a sizable stream byte by byte (so, just calling Base64InputStream.read()), after 10920 successful read()s, this happens:
java.lang.ArrayIndexOutOfBoundsException: 2
at org.apache.commons.codec.binary.Base64.encode(Base64.java:502)
at org.apache.commons.codec.binary.Base64InputStream.read(Base64InputStream.java:157)
at org.apache.commons.codec.binary.Base64InputStream.read(Base64InputStream.java:109)
Based on this, the necessary conditions seem to be that buffer = null and modulus = 2. Then, if a read() is done, a single-byte buffer is used, whose length is doubled by resizeBuffer(), but that still doesn't make it big enough to hold the 4 bytes written to it because modulus was just incremented to 0.
Here's some sample code:
import org.apache.commons.codec.binary.Base64InputStream;
public class TestReads {
public static void main(String[] args) {
Base64InputStream b64stream = new Base64InputStream(System.in, true, 0, null);
int n = 0;
try {
while (b64stream.read() != -1) n++;
} catch (Exception x) {
System.out.println(n);
x.printStackTrace();
}
}
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.