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

Vladimir Sitnikov vsitnikov at openjdk.org
Thu Dec 14 06:15:56 UTC 2023


On Fri, 10 Feb 2023 17:38:51 GMT, Brian Burkhalter <bpb at openjdk.org> wrote:

>> `java.io.InputStream::transferTo` could conceivably return a negative value if the count of bytes transferred overflows a `long`. Modify the method to limit the number of bytes transferred to `Long.MAX_VALUE` per invocation.
>
> Brian Burkhalter has updated the pull request incrementally with one additional commit since the last revision:
> 
>   8297632: Align SequenceInputStream style with other changes in patch

src/java.base/share/classes/java/io/SequenceInputStream.java line 249:

> 247:                         transferred = Math.addExact(transferred, in.transferTo(out));
> 248:                     } catch (ArithmeticException ignore) {
> 249:                         return Long.MAX_VALUE;

@bplb , this looks like a bug to me: once `transferred` reaches `Long.MAX_VALUE` the transfer loop will terminate and the transfer will stop even in the case there are more streams available in the sequence.

I think the proper code should be `transferred = Long.MAX_VALUE` instead of `return Long.MAX_VALUE`.

What do you think?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/11403#discussion_r1426217875


More information about the core-libs-dev mailing list