[ 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)