Summary
Modify the implementation of DataInputStream.readFully(byte[] b, int off, int len)
to throw NullPointerException
and IndexOutOfBoundsException
as described in its specification,
Problem
DataInputStream.readFully(byte[] b, int off, int len)
is specified to throw a NullPointerException
if b
is null
, and an IndexOutOfBoundsException
if off
is negative, len
is negative, or len
is greater than b.length - off
. For example if b
was null
and len
was zero, then the method would fail silently without throwing a NullPointerException
. Also if b
was non-null
, off
was negative and len
was zero, then the method would fail silently without throwing an IndexOutOfBoundsException
.
Solution
Use Objects.checkFromIndexSize(int,int,int)
to validate the parameters.
--- a/src/java.base/share/classes/java/io/DataInputStream.java Fri Aug 07 20:39:10 2020 +0100
+++ b/src/java.base/share/classes/java/io/DataInputStream.java Fri Aug 07 12:58:40 2020 -0700
@@ -25,6 +25,8 @@
+import java.util.Objects;
+
/**
* A data input stream lets an application read primitive Java data
* types from an underlying input stream in a machine-independent
@@ -192,8 +194,7 @@
* @see java.io.FilterInputStream#in
*/
public final void readFully(byte b[], int off, int len) throws IOException {
- if (len < 0)
- throw new IndexOutOfBoundsException();
+ Objects.checkFromIndexSize(off, len, b.length);
int n = 0;
while (n < len) {
int count = in.read(b, off + n, len - n);
Specification
No specification change.
- csr of
-
JDK-8245036 DataInputStream.readFully(byte[], int, int) does not throw expected IndexOutOfBoundsExceptions
-
- Resolved
-