On Wed, 29 Nov 2023 22:38:59 GMT, Markus KARG <d...@openjdk.org> wrote:

>> 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.*?

I don't think checking if the package is java.io is secure:

ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
BufferedInputStream bis = new BufferedInputStream(bais);
UntrustedOutputStream uos = new UntrustedOutputStream();
bis.transferTo(new java.io.DataOutputStream(uos)); 

You have to know that it is in the java.io package and it doesn't wrap another 
stream.

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

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

Reply via email to