You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zookeeper.apache.org by "Bill Havanki (JIRA)" <ji...@apache.org> on 2014/04/25 19:31:18 UTC
[jira] [Commented] (ZOOKEEPER-1843) Oddity in ByteBufferInputStream
skip
[ https://issues.apache.org/jira/browse/ZOOKEEPER-1843?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13981284#comment-13981284 ]
Bill Havanki commented on ZOOKEEPER-1843:
-----------------------------------------
Those lines are definitely wrong. Example:
* byte buffer 20 bytes in length
* current position is 10 (halfway)
Calling skip(5) should move the position to 15. However, since the new position = 15 > remaining = 10, the call moves all the way to the end of the buffer.
The simpler alternative suggested in the ticket description works.
> Oddity in ByteBufferInputStream skip
> ------------------------------------
>
> Key: ZOOKEEPER-1843
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1843
> Project: ZooKeeper
> Issue Type: Bug
> Reporter: Justin SB
> Assignee: Bill Havanki
> Priority: Minor
>
> I was reading ByteBufferInputStream.java; here is the skip method:
> public long skip(long n) throws IOException {
> long newPos = bb.position() + n;
> if (newPos > bb.remaining()) {
> n = bb.remaining();
> }
> bb.position(bb.position() + (int) n);
> return n;
> }
> The first two lines look wrong; we compare a "point" (position) to a "distance" (remaining). I think the test should be if (newPos >= bb.limit()).
> Or more simply:
> public long skip(long n) throws IOException {
> int remaining = buffer.remaining();
> if (n > remaining) {
> n = remaining;
> }
> buffer.position(buffer.position() + (int) n);
> return n;
> }
--
This message was sent by Atlassian JIRA
(v6.2#6252)