You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/06/07 19:19:48 UTC

[commons-io] branch master updated: [IO-799] ReaderInputStream.read() throws an exception instead of returning -1 when called again after returning -1.

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git


The following commit(s) were added to refs/heads/master by this push:
     new 058de054 [IO-799] ReaderInputStream.read() throws an exception instead of returning -1 when called again after returning -1.
058de054 is described below

commit 058de0546c14c309b7323b5f063d8faf85cdfb42
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Wed Jun 7 15:19:43 2023 -0400

    [IO-799] ReaderInputStream.read() throws an exception instead of
    returning -1 when called again after returning -1.
---
 src/changes/changes.xml                                      |  5 +++++
 .../java/org/apache/commons/io/input/ReaderInputStream.java  |  3 +++
 .../org/apache/commons/io/input/ReaderInputStreamTest.java   | 12 +++++++++++-
 3 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index f9ff3ae3..88ddad76 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -47,6 +47,11 @@ The <action> type attribute can be add,update,fix,remove.
   </properties>
 
   <body>
+    <release version="2.13.1" date="2023-MM-DD" description="Java 8 required.">
+      <action dev="ggregory" type="fix" issue="IO-799" due-to="Jeroen van der Vegt, Gary Gregory">
+        ReaderInputStream.read() throws an exception instead of returning -1 when called again after returning -1.
+      </action>
+    </release>    
     <release version="2.13.0" date="2023-06-03" description="Java 8 required.">
       <!-- FIX -->
       <action issue="IO-791" dev="ggregory" type="fix" due-to="Chad Wilson, Gary Gregory">
diff --git a/src/main/java/org/apache/commons/io/input/ReaderInputStream.java b/src/main/java/org/apache/commons/io/input/ReaderInputStream.java
index 0933079e..bba17caa 100644
--- a/src/main/java/org/apache/commons/io/input/ReaderInputStream.java
+++ b/src/main/java/org/apache/commons/io/input/ReaderInputStream.java
@@ -339,6 +339,9 @@ public class ReaderInputStream extends InputStream {
      * @throws IOException If an I/O error occurs
      */
     private void fillBuffer() throws IOException {
+        if (endOfInput) {
+            return;
+        }
         if (!endOfInput && (lastCoderResult == null || lastCoderResult.isUnderflow())) {
             encoderIn.compact();
             final int position = encoderIn.position();
diff --git a/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java b/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java
index db104daf..944724e2 100644
--- a/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java
+++ b/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java
@@ -209,6 +209,17 @@ public class ReaderInputStreamTest {
         testWithSingleByteRead(LARGE_TEST_STRING, UTF_8);
     }
 
+    @Test
+    public void testReadEofTwice() throws IOException {
+        try (ReaderInputStream reader = ReaderInputStream.builder().setCharset(StandardCharsets.UTF_8).setReader(new StringReader("123")).get()) {
+            assertEquals('1', reader.read());
+            assertEquals('2', reader.read());
+            assertEquals('3', reader.read());
+            assertEquals(-1, reader.read());
+            assertEquals(-1, reader.read());
+        }
+    }
+
     @SuppressWarnings("deprecation")
     @Test
     public void testReadZero() throws Exception {
@@ -220,7 +231,6 @@ public class ReaderInputStreamTest {
             testReadZero(inStr, inputStream);
         }
     }
-
     private void testReadZero(final String inStr, final ReaderInputStream inputStream) throws IOException {
         final byte[] bytes = new byte[30];
         assertEquals(0, inputStream.read(bytes, 0, 0));