[ 
https://issues.apache.org/jira/browse/CODEC-130?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13231638#comment-13231638
 ] 

Thomas Neidhart commented on CODEC-130:
---------------------------------------

I think we do not have a choice other than skipping uncompressed bytes.

Consider the case where a user receives an InputStream that is in fact a 
filtered base64 stream. From the POV of the user, he may not be even aware that 
the underlying stream is providing encoded data. What he sees and is interested 
in are decoded chars, thus a skip on any filtered input stream should skip the 
amount of bytes the stream is responsible for (i.e. is producing as output).
                
> Base64InputStream.skip skips underlying stream, not output
> ----------------------------------------------------------
>
>                 Key: CODEC-130
>                 URL: https://issues.apache.org/jira/browse/CODEC-130
>             Project: Commons Codec
>          Issue Type: Bug
>    Affects Versions: 1.5
>            Reporter: James Pickering
>            Priority: Minor
>         Attachments: base64snippet.java
>
>
> Base64InputStream.skip() skips within underlying stream, leading to 
> unexpected behaviour.
> The following code will reproduce the issue:
> @Test
> public void testSkip() throws Throwable {
>     InputStream ins =
>             new 
> ByteArrayInputStream("AAAA////".getBytes("ISO-8859-1"));//should decode to 
> {0, 0, 0, 255, 255, 255}
>     Base64InputStream instance = new Base64InputStream(ins);
>     assertEquals(3L, instance.skip(3L)); //should skip 3 decoded characters, 
> or 4 encoded characters
>     assertEquals(255, instance.read()); //Currently returns 3, as it is 
> decoding "A/", not "//" 
> }
> The following code, if added to Base64InputStream, or (BaseNCodecInputStream 
> in the dev build) would resolve the issue:
> @Override
> public long skip(long n) throws IOException {
>     //delegate to read()
>     long bytesRead = 0;
>     while ((bytesRead < n) && (read() != -1)) {
>         bytesRead++;
>     }
>     return bytesRead;
> }
> More efficient code may be possible.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to