IoBuffer.read(byte[],int,int) fix
Project: http://git-wip-us.apache.org/repos/asf/mina/repo Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/e5641807 Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/e5641807 Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/e5641807 Branch: refs/heads/trunk Commit: e56418078455274a7ca3f3575c01feb3c643887f Parents: 47c4113 Author: RaphaeÌl P. Barazzutti <[email protected]> Authored: Wed Jul 3 23:58:59 2013 +0200 Committer: RaphaeÌl P. Barazzutti <[email protected]> Committed: Thu Jul 4 00:41:04 2013 +0200 ---------------------------------------------------------------------- .../main/java/org/apache/mina/codec/IoBuffer.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina/blob/e5641807/codec/src/main/java/org/apache/mina/codec/IoBuffer.java ---------------------------------------------------------------------- diff --git a/codec/src/main/java/org/apache/mina/codec/IoBuffer.java b/codec/src/main/java/org/apache/mina/codec/IoBuffer.java index 1be49a5..e3ff463 100644 --- a/codec/src/main/java/org/apache/mina/codec/IoBuffer.java +++ b/codec/src/main/java/org/apache/mina/codec/IoBuffer.java @@ -181,6 +181,10 @@ public final class IoBuffer { @Override public int read(byte[] b, int off, int len) throws IOException { + if (!hasRemaining()) { + return -1; + } + int toRead = Math.min(remaining(), len); get(b, off, toRead); return toRead; @@ -350,13 +354,12 @@ public final class IoBuffer { if (remaining() < length) { throw new BufferUnderflowException(); } - position.getNode().getBuffer().position(position.getPositionInNode()); int remainsToCopy = length; int currentOffset = offset; while (remainsToCopy > 0) { position.updatePos(); - + position.getNode().getBuffer().position(position.getPositionInNode()); ByteBuffer currentBuffer = position.getNode().getBuffer(); int blocksize = Math.min(remainsToCopy, currentBuffer.remaining()); position.getNode().getBuffer().get(dst, currentOffset, blocksize); @@ -365,8 +368,9 @@ public final class IoBuffer { remainsToCopy -= blocksize; position.incrementPosition(blocksize); + + position.getNode().getBuffer().position(0); } - position.getNode().getBuffer().position(0); return this; } @@ -670,13 +674,12 @@ public final class IoBuffer { return this; } - - + /** * @see ByteBuffer#put(ByteBuffer) */ public IoBuffer put(IoBuffer src) { - if(src==this){ // NOSONAR, checking the instance + if (src == this) { // NOSONAR, checking the instance throw new IllegalArgumentException(); }
