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 2019/11/25 16:51:13 UTC
[commons-io] branch master updated: [IO-640] NPE in
org.apache.commons.io.IOUtils.contentEquals(InputStream,
InputStream) when only one input is null.
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 fa36ecd [IO-640] NPE in org.apache.commons.io.IOUtils.contentEquals(InputStream, InputStream) when only one input is null.
fa36ecd is described below
commit fa36ecd5918e76bf6524cb6fb13535ccadd9919a
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Mon Nov 25 11:51:09 2019 -0500
[IO-640] NPE in org.apache.commons.io.IOUtils.contentEquals(InputStream,
InputStream) when only one input is null.
---
src/changes/changes.xml | 3 +++
src/main/java/org/apache/commons/io/IOUtils.java | 19 ++++++++++++-------
.../java/org/apache/commons/io/IOUtilsTestCase.java | 12 ++++++++++++
3 files changed, 27 insertions(+), 7 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 245f748..fc34f47 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -165,6 +165,9 @@ The <action> type attribute can be add,update,fix,remove.
Add and reuse org.apache.commons.io.IOUtils.closeQuitely(Closeable, Consumer<IOException>).
Add and reuse org.apache.commons.io.IOUtils.close(Closeable, IOConsumer<IOException>).
</action>
+ <action issue="IO-640" dev="ggregory" type="add" due-to="Gary Gregory">
+ NPE in org.apache.commons.io.IOUtils.contentEquals(InputStream, InputStream) when only one input is null.
+ </action>
</release>
<release version="2.6" date="2017-10-15" description="Java 7 required, Java 9 supported.">
diff --git a/src/main/java/org/apache/commons/io/IOUtils.java b/src/main/java/org/apache/commons/io/IOUtils.java
index 993828a..ba92c2e 100644
--- a/src/main/java/org/apache/commons/io/IOUtils.java
+++ b/src/main/java/org/apache/commons/io/IOUtils.java
@@ -712,6 +712,9 @@ public class IOUtils {
if (input1 == input2) {
return true;
}
+ if (input1 == null ^ input2 == null) {
+ return false;
+ }
final BufferedInputStream bufferedInput1 = buffer(input1);
final BufferedInputStream bufferedInput2 = buffer(input2);
int ch = bufferedInput1.read();
@@ -740,25 +743,26 @@ public class IOUtils {
* @throws IOException if an I/O error occurs
* @since 1.1
*/
- public static boolean contentEquals(Reader input1, Reader input2)
+ @SuppressWarnings("resource")
+ public static boolean contentEquals(final Reader input1, final Reader input2)
throws IOException {
if (input1 == input2) {
return true;
}
- input1 = toBufferedReader(input1);
- input2 = toBufferedReader(input2);
+ BufferedReader bufferedInput1 = toBufferedReader(input1);
+ BufferedReader bufferedInput2 = toBufferedReader(input2);
- int ch = input1.read();
+ int ch = bufferedInput1.read();
while (EOF != ch) {
- final int ch2 = input2.read();
+ final int ch2 = bufferedInput2.read();
if (ch != ch2) {
return false;
}
- ch = input1.read();
+ ch = bufferedInput1.read();
}
- final int ch2 = input2.read();
+ final int ch2 = bufferedInput2.read();
return ch2 == EOF;
}
@@ -776,6 +780,7 @@ public class IOUtils {
* @throws IOException if an I/O error occurs
* @since 2.2
*/
+ @SuppressWarnings("resource")
public static boolean contentEqualsIgnoreEOL(final Reader input1, final Reader input2)
throws IOException {
if (input1 == input2) {
diff --git a/src/test/java/org/apache/commons/io/IOUtilsTestCase.java b/src/test/java/org/apache/commons/io/IOUtilsTestCase.java
index cc4c3b1..4ea628e 100644
--- a/src/test/java/org/apache/commons/io/IOUtilsTestCase.java
+++ b/src/test/java/org/apache/commons/io/IOUtilsTestCase.java
@@ -231,6 +231,18 @@ public class IOUtilsTestCase {
@Test public void testContentEquals_InputStream_InputStream() throws Exception {
{
final ByteArrayInputStream input1 = new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8));
+ assertTrue(IOUtils.contentEquals((InputStream) null, null));
+ }
+ {
+ final ByteArrayInputStream input1 = new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8));
+ assertFalse(IOUtils.contentEquals(input1, null));
+ }
+ {
+ final ByteArrayInputStream input1 = new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8));
+ assertFalse(IOUtils.contentEquals(null, input1));
+ }
+ {
+ final ByteArrayInputStream input1 = new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8));
assertTrue(IOUtils.contentEquals(input1, input1));
}
{