8297632: InputStream.transferTo() method should specify what the return value should be when the number of bytes transfered is larger than Long.MAX_VALUE

Reviewed-by: alanb, lancea
This commit is contained in:
Brian Burkhalter 2023-02-14 16:30:52 +00:00
parent f7dee77d73
commit 5b2d430131
7 changed files with 52 additions and 13 deletions

View file

@ -240,12 +240,18 @@ public class SequenceInputStream extends InputStream {
public long transferTo(OutputStream out) throws IOException {
Objects.requireNonNull(out, "out");
if (getClass() == SequenceInputStream.class) {
long c = 0;
long transferred = 0;
while (in != null) {
c += in.transferTo(out);
if (transferred < Long.MAX_VALUE) {
try {
transferred = Math.addExact(transferred, in.transferTo(out));
} catch (ArithmeticException ignore) {
return Long.MAX_VALUE;
}
}
nextStream();
}
return c;
return transferred;
} else {
return super.transferTo(out);
}