[ 
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

Reply via email to