[ https://issues.apache.org/jira/browse/CODEC-105?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Gary Gregory updated CODEC-105: ------------------------------- Summary: ArrayIndexOutOfBoundsException when doing multiple reads() on encoding Base64InputStream (was: ArrayIndexOutOfBoundsException when doing multiple reads() on encoding b64InputStream) > ArrayIndexOutOfBoundsException when doing multiple reads() on encoding > Base64InputStream > ---------------------------------------------------------------------------------------- > > 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 > Assignee: Julius Davies > Fix For: 1.5 > > Attachments: codec-105-junit-including-ASL2-license.patch, > codec-105.patch > > > 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. For more information on JIRA, see: http://www.atlassian.com/software/jira