Skip to content

Commit f584ed9

Browse files
committed
IO-311 IOUtils.read(InputStream/Reader) ignores the offset parameter
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/io/trunk@1304066 13f79535-47bb-0310-9956-ffa450edef68
1 parent 9282a0c commit f584ed9

3 files changed

Lines changed: 23 additions & 2 deletions

File tree

src/changes/changes.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ The <action> type attribute can be add,update,fix,remove.
4040

4141
<body>
4242
<release version="2.2" date="TBA" description="">
43+
<action issue="IO-311" dev="sebb" type="fix" due-to="Robert Muir">
44+
IOUtils.read(InputStream/Reader) ignores the offset parameter
45+
</action>
4346
<action issue="IO-312" dev="sebb" type="fix">
4447
CharSequenceInputStream(CharSequence s, Charset charset, int bufferSize) ignores bufferSize
4548
</action>

src/main/java/org/apache/commons/io/IOUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1977,7 +1977,7 @@ public static int read(Reader input, char[] buffer, int offset, int length) thro
19771977
int remaining = length;
19781978
while (remaining > 0) {
19791979
int location = length - remaining;
1980-
int count = input.read(buffer, location, remaining);
1980+
int count = input.read(buffer, offset + location, remaining);
19811981
if (EOF == count) { // EOF
19821982
break;
19831983
}
@@ -2023,7 +2023,7 @@ public static int read(InputStream input, byte[] buffer, int offset, int length)
20232023
int remaining = length;
20242024
while (remaining > 0) {
20252025
int location = length - remaining;
2026-
int count = input.read(buffer, location, remaining);
2026+
int count = input.read(buffer, offset + location, remaining);
20272027
if (EOF == count) { // EOF
20282028
break;
20292029
}

src/test/java/org/apache/commons/io/IOUtilsTestCase.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.io.InputStream;
3131
import java.io.InputStreamReader;
3232
import java.io.Reader;
33+
import java.io.StringReader;
3334
import java.net.URI;
3435
import java.net.URL;
3536
import java.nio.channels.Selector;
@@ -732,6 +733,23 @@ public void testReadReader() throws Exception {
732733
}
733734
IOUtils.closeQuietly(input);
734735
}
736+
737+
public void testReadReaderWithOffset() throws Exception {
738+
Reader reader = new StringReader("abcd1234");
739+
char[] buffer = "wx00000000".toCharArray();
740+
IOUtils.readFully(reader, buffer, 2, 8);
741+
assertEquals("wxabcd1234", new String(buffer));
742+
IOUtils.closeQuietly(reader);
743+
}
744+
745+
public void testReadStreamWithOffset() throws Exception {
746+
byte[] bytes = "abcd1234".getBytes("UTF-8");
747+
ByteArrayInputStream stream = new ByteArrayInputStream(bytes);
748+
byte[] buffer = "wx00000000".getBytes("UTF-8");
749+
IOUtils.readFully(stream, buffer, 2, 8);
750+
assertEquals("wxabcd1234", new String(buffer, 0, buffer.length, "UTF-8"));
751+
IOUtils.closeQuietly(stream);
752+
}
735753

736754
// Tests from IO-305
737755

0 commit comments

Comments
 (0)