commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ZAK Magnus (JIRA)" <j...@apache.org>
Subject [jira] Created: (CODEC-105) ArrayIndexOutOfBoundsException when doing multiple reads() on encoding b64InputStream
Date Fri, 13 Aug 2010 16:45:17 GMT
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.


Mime
View raw message