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

Peter Lee commented on COMPRESS-595:
------------------------------------

Hi [~nervy_protozoan]

Thank you for your reporting.

I made a test with your test case and found that the current implemention could 
be passed. I'm testing with the latest code. Maybe you missed something in your 
testcase?

> IOUtils.readRange(ReadableByteChannel input, int len) reads more than len 
> when input.read() returns < len (ie. there is a partial read)
> ---------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: COMPRESS-595
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-595
>             Project: Commons Compress
>          Issue Type: Bug
>    Affects Versions: 1.21
>            Reporter: NP
>            Priority: Major
>         Attachments: IOUtilsTest.kt
>
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> When `input.read(b)` returns `readNow` < `len`, then it means
>  `input.read(b)` will need to be called again with the same
>  buffer, whose `remaining()` is now the old `remaining()` - `readNow`.
> This way the ReadableByteChannel knows how many bytes are to be
>  read in subsequent iterations of the `while (read < len)` loop.
> This is currently not the case, because there is a call to rewind()
>  which results in a buffer whose remaining() is reset to `len` if
>  `readNow` < `len`.
> I suspect the readRange() method has only been used with channels that never 
> do partial reads (such In Memory Byte Channels backed by an array), and hence 
> the problem has not been experienced until now.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to