Skip to content

Commit

Permalink
6766844: ByteArrayInputStream#read with a byte array of length 0 not …
Browse files Browse the repository at this point in the history
…consistent with InputStream when at EOF

Reviewed-by: naoto, lancea, joehw
  • Loading branch information
Brian Burkhalter committed Jul 8, 2021
1 parent 9e75f92 commit f46a917
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1994, 2018, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1994, 2021, 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
Expand Down Expand Up @@ -156,6 +156,10 @@ public synchronized int read() {
* {@code b[off+k-1]} in the manner performed by {@code System.arraycopy}.
* The value {@code k} is added into {@code pos} and {@code k} is returned.
* <p>
* Unlike the {@link InputStream#read(byte[],int,int) overridden method}
* of {@code InputStream}, this method returns {@code -1} instead of zero
* if the end of the stream has been reached and {@code len == 0}.
* <p>
* This {@code read} method cannot block.
*
* @param b the buffer into which the data is read.
Expand Down
17 changes: 12 additions & 5 deletions test/jdk/java/io/ByteArrayInputStream/ReadAllReadNTransferTo.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2018, 2021, 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
Expand Down Expand Up @@ -33,7 +33,7 @@
* @library /test/lib
* @build jdk.test.lib.RandomFactory
* @run main ReadAllReadNTransferTo
* @bug 8180451
* @bug 6766844 8180451
* @summary Verify ByteArrayInputStream readAllBytes, readNBytes, and transferTo
* @key randomness
*/
Expand All @@ -48,8 +48,16 @@ public static void main(String... args) throws IOException {
int position = random.nextInt(SIZE/2);
int size = random.nextInt(SIZE - position);

ByteArrayInputStream bais =
new ByteArrayInputStream(buf, position, size);
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
bais.readAllBytes();
if (bais.read(new byte[0]) != -1) {
throw new RuntimeException("read(byte[]) did not return -1");
}
if (bais.read(new byte[1], 0, 0) != -1) {
throw new RuntimeException("read(byte[],int,int) did not return -1");
}

bais = new ByteArrayInputStream(buf, position, size);
int off = size < 2 ? 0 : random.nextInt(size / 2);
int len = size - off < 1 ? 0 : random.nextInt(size - off);

Expand All @@ -72,7 +80,6 @@ public static void main(String... args) throws IOException {
throw new RuntimeException("readAllBytes content");
}

// XXX transferTo()
bais = new ByteArrayInputStream(buf);
ByteArrayOutputStream baos = new ByteArrayOutputStream(buf.length);
if (bais.transferTo(baos) != buf.length) {
Expand Down

0 comments on commit f46a917

Please sign in to comment.