RFR: 8320971: Use BufferedInputStream.buf directly when param of implTransferTo() is trusted

Markus KARG duke at openjdk.org
Wed Nov 29 22:45:08 UTC 2023


On Wed, 29 Nov 2023 19:59:03 GMT, Alan Bateman <alanb at openjdk.org> wrote:

>> It looks like we can skip copying of `byte[]` in `BufferedInputStream.implTransferTo()` for `OutputStreams` residing in `java.io`.
>> 
>> See comment by @vlsi in https://github.com/openjdk/jdk/pull/10525/files#diff-e19c508d1bb6ee78697ecca66947c395adda0d9c49a85bf696e677ecbd977af1R612
>
> src/java.base/share/classes/java/io/BufferedInputStream.java line 647:
> 
>> 645:             if (avail > 0) {
>> 646:                 // trust all OutputStreams from java.io
>> 647:                 if (out.getClass().getPackageName() == BufferedInputStream.class.getPackageName()) {
> 
> I don't think Class::getPackageName documents that the returned String is intern so I wonder if the == check will lead to questions and suggestions of a bug. Classes with names starting with "java." can only be defined to the boot or platform class loader (details in the ClassLoader API docs) so you could just check if the package name equals "java.io".

Do we only want to trust java.io or anything starting with java.*?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/16879#discussion_r1409947085


More information about the core-libs-dev mailing list