From 9b7c3ac11f968364799537040f4765b881ed96ae Mon Sep 17 00:00:00 2001 From: Anna Papitto Date: Fri, 2 Dec 2022 15:56:56 -0800 Subject: [PATCH] IO#readFully: provide overload that fills the full array IO#readFully is often called with the intent to fill the destination array from beginning to end. The redundant arguments for where to start and stop filling are opportunities for bugs if specified incorrectly or if not changed to match a changed array length. Provide a overloaded method for filling the full destination array. Change-Id: I964f18f4a061189cce1ca00ff0258669277ff499 Signed-off-by: Anna Papitto --- .../jgit/util/io/TimeoutInputStreamTest.java | 4 ++-- .../src/org/eclipse/jgit/util/IO.java | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/TimeoutInputStreamTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/TimeoutInputStreamTest.java index 648416925..76bda6a35 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/TimeoutInputStreamTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/io/TimeoutInputStreamTest.java @@ -91,7 +91,7 @@ public void testTimeout_readBuffer_Success1() throws IOException { final byte[] exp = new byte[] { 'a', 'b', 'c' }; final byte[] act = new byte[exp.length]; out.write(exp); - IO.readFully(is, act, 0, act.length); + IO.readFully(is, act); assertArrayEquals(exp, act); } @@ -110,7 +110,7 @@ public void testTimeout_readBuffer_Success2() throws IOException { public void testTimeout_readBuffer_Timeout() throws IOException { beginRead(); try { - IO.readFully(is, new byte[512], 0, 512); + IO.readFully(is, new byte[512]); fail("incorrectly read bytes"); } catch (InterruptedIOException e) { // expected diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/IO.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/IO.java index 6d5694e43..80877bbdc 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/IO.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/IO.java @@ -206,6 +206,25 @@ public static void readFully(final InputStream fd, final byte[] dst, } } + /** + * Read from input until the entire byte array filled, or throw an exception + * if stream ends first. + * + * @param fd + * input stream to read the data from. + * @param dst + * buffer that must be fully populated + * @throws EOFException + * the stream ended before dst was fully populated. + * @throws java.io.IOException + * there was an error reading from the stream. + * @since 6.5 + */ + public static void readFully(InputStream fd, byte[] dst) + throws IOException { + readFully(fd, dst, 0, dst.length); + } + /** * Read as much of the array as possible from a channel. *