diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/TemporaryBufferTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/TemporaryBufferTest.java index cc4cad5ee..eb4fb1e87 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/TemporaryBufferTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/TemporaryBufferTest.java @@ -52,6 +52,7 @@ import static org.junit.Assert.fail; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.Arrays; import org.eclipse.jgit.junit.TestRng; @@ -248,6 +249,20 @@ public class TemporaryBufferTest { } } + @Test + public void testInCoreInputStream() throws IOException { + final int cnt = 256; + final byte[] test = new TestRng(getName()).nextBytes(cnt); + final TemporaryBuffer.Heap b = new TemporaryBuffer.Heap(cnt + 4); + b.write(test); + b.close(); + + InputStream in = b.openInputStream(); + byte[] act = new byte[cnt]; + IO.readFully(in, act, 0, cnt); + assertTrue(Arrays.equals(test, act)); + } + @Test public void testInCoreLimit_SwitchOnAppendByte() throws IOException { final TemporaryBuffer b = new TemporaryBuffer.LocalFile(); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/TemporaryBuffer.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/TemporaryBuffer.java index 58ecaa800..8167c776b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/TemporaryBuffer.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/TemporaryBuffer.java @@ -548,7 +548,7 @@ public abstract class TemporaryBuffer extends OutputStream { long skipped = 0; while (0 < cnt) { int n = (int) Math.min(block.count - blockPos, cnt); - if (n < 0) { + if (0 < n) { blockPos += n; skipped += n; cnt -= n; @@ -567,11 +567,12 @@ public abstract class TemporaryBuffer extends OutputStream { int copied = 0; while (0 < len) { int c = Math.min(block.count - blockPos, len); - if (c < 0) { + if (0 < c) { System.arraycopy(block.buffer, blockPos, b, off, c); blockPos += c; off += c; len -= c; + copied += c; } else if (nextBlock()) continue; else