Author: sebb
Date: Tue Mar 13 17:29:39 2012
New Revision: 1300249

URL: http://svn.apache.org/viewvc?rev=1300249&view=rev
Log:
IO-306 ReaderInputStream#read(byte[] b, int off, int len) should always return 
0 for length == 0

Modified:
    commons/proper/io/trunk/src/changes/changes.xml
    
commons/proper/io/trunk/src/main/java/org/apache/commons/io/input/ReaderInputStream.java
    
commons/proper/io/trunk/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java

Modified: commons/proper/io/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/io/trunk/src/changes/changes.xml?rev=1300249&r1=1300248&r2=1300249&view=diff
==============================================================================
--- commons/proper/io/trunk/src/changes/changes.xml (original)
+++ commons/proper/io/trunk/src/changes/changes.xml Tue Mar 13 17:29:39 2012
@@ -40,6 +40,9 @@ The <action> type attribute can be add,u
 
   <body>
     <release version="2.2" date="TBA">
+      <action dev="sebb" type="fix" issue="IO-306">
+        ReaderInputStream#read(byte[] b, int off, int len) should always 
return 0 for length == 0
+      </action>        
       <action dev="sebb" type="add" issue="IO-173" due-to="Marcos Vinícius da 
Silva">
         FileUtils.listFiles() doesn't return directories
       </action>        

Modified: 
commons/proper/io/trunk/src/main/java/org/apache/commons/io/input/ReaderInputStream.java
URL: 
http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/input/ReaderInputStream.java?rev=1300249&r1=1300248&r2=1300249&view=diff
==============================================================================
--- 
commons/proper/io/trunk/src/main/java/org/apache/commons/io/input/ReaderInputStream.java
 (original)
+++ 
commons/proper/io/trunk/src/main/java/org/apache/commons/io/input/ReaderInputStream.java
 Tue Mar 13 17:29:39 2012
@@ -221,6 +221,9 @@ public class ReaderInputStream extends I
     @Override
     public int read(byte[] b, int off, int len) throws IOException {
         int read = 0;
+        if (len == 0) {
+            return 0; // Always return 0 if len == 0
+        }
         while (len > 0) {
             if (encoderOut.hasRemaining()) {
                 int c = Math.min(encoderOut.remaining(), len);

Modified: 
commons/proper/io/trunk/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java?rev=1300249&r1=1300248&r2=1300249&view=diff
==============================================================================
--- 
commons/proper/io/trunk/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java
 (original)
+++ 
commons/proper/io/trunk/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java
 Tue Mar 13 17:29:39 2012
@@ -105,9 +105,24 @@ public class ReaderInputStreamTest {
     
     @Test
     public void testReadZero() throws Exception {
-        ReaderInputStream r = new ReaderInputStream(new StringReader("test"));
+        final String inStr = "test";
+        ReaderInputStream r = new ReaderInputStream(new StringReader(inStr));
         byte[] bytes = new byte[30];
         assertEquals(0, r.read(bytes, 0, 0));
+        assertEquals(inStr.length(), r.read(bytes, 0, inStr.length()+1));
+        // Should always return 0 for length == 0
+        assertEquals(0, r.read(bytes, 0, 0));
+    }
+    
+    @Test
+    public void testReadZeroEmptyString() throws Exception {
+        ReaderInputStream r = new ReaderInputStream(new StringReader(""));
+        byte[] bytes = new byte[30];
+        // Should always return 0 for length == 0
+        assertEquals(0, r.read(bytes, 0, 0));
+        assertEquals(-1, r.read(bytes, 0, 1));
+        assertEquals(0, r.read(bytes, 0, 0));
+        assertEquals(-1, r.read(bytes, 0, 1));
     }
     
     /**


Reply via email to