From adb156a9b20cddf77d7421d8d9522f808c81d8a8 Mon Sep 17 00:00:00 2001 From: Brian Burkhalter Date: Wed, 22 Nov 2017 08:12:45 -0800 Subject: [PATCH] 8191516: OutputStream.write(byte[],int,int) could have fewer parameter bounds checks Reduce parameter bounds checks from five to three as in InputStream::read Reviewed-by: psandoz --- .../share/classes/java/io/InputStream.java | 14 ++++++-------- .../share/classes/java/io/OutputStream.java | 15 ++++++--------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/java.base/share/classes/java/io/InputStream.java b/src/java.base/share/classes/java/io/InputStream.java index 0f4b6f5baee..b4d6255034f 100644 --- a/src/java.base/share/classes/java/io/InputStream.java +++ b/src/java.base/share/classes/java/io/InputStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -164,11 +164,9 @@ public abstract class InputStream implements Closeable { * @see java.io.InputStream#read() */ public int read(byte b[], int off, int len) throws IOException { - if (b == null) { - throw new NullPointerException(); - } else if (off < 0 || len < 0 || len > b.length - off) { - throw new IndexOutOfBoundsException(); - } else if (len == 0) { + Objects.requireNonNull(b); + Objects.checkFromIndexSize(off, len, b.length); + if (len == 0) { return 0; } @@ -302,8 +300,8 @@ public abstract class InputStream implements Closeable { */ public int readNBytes(byte[] b, int off, int len) throws IOException { Objects.requireNonNull(b); - if (off < 0 || len < 0 || len > b.length - off) - throw new IndexOutOfBoundsException(); + Objects.checkFromIndexSize(off, len, b.length); + int n = 0; while (n < len) { int count = read(b, off + n, len - n); diff --git a/src/java.base/share/classes/java/io/OutputStream.java b/src/java.base/share/classes/java/io/OutputStream.java index 03a058b6e87..c6cb74d9452 100644 --- a/src/java.base/share/classes/java/io/OutputStream.java +++ b/src/java.base/share/classes/java/io/OutputStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,8 @@ package java.io; +import java.util.Objects; + /** * This abstract class is the superclass of all classes representing * an output stream of bytes. An output stream accepts output bytes @@ -104,14 +106,9 @@ public abstract class OutputStream implements Closeable, Flushable { * stream is closed. */ public void write(byte b[], int off, int len) throws IOException { - if (b == null) { - throw new NullPointerException(); - } else if ((off < 0) || (off > b.length) || (len < 0) || - ((off + len) > b.length) || ((off + len) < 0)) { - throw new IndexOutOfBoundsException(); - } else if (len == 0) { - return; - } + Objects.requireNonNull(b); + Objects.checkFromIndexSize(off, len, b.length); + // len == 0 condition implicitly handled by loop bounds for (int i = 0 ; i < len ; i++) { write(b[off + i]); }