On Mon, 10 Apr 2023 05:12:07 GMT, Tingjun Yuan <d...@openjdk.org> wrote:

>> If you really don't trust a collection, then we can't do anything.
>> 
>> Can copying the results of `toArray` ensure accuracy and security? It has 
>> too many possible problems. Maybe the size of the array is wrong, maybe it 
>> forgot to copy the contents of the collection and all it returns is an array 
>> full of nulls.
>> 
>> To put it one step further, is its iterator necessarily correct? Perhaps its 
>> iterator implementation is also incorrect:
>> 
>> 
>> class BadList implements List<Object> {
>>     private Object[] array;
>> 
>>     // ...
>> 
>>     public Iterator<Object> iterator() {
>>         // crazy implementation
>>         return new Iterator<Object>() {
>>             int i = 0;
>> 
>>             public boolean hasNext() {
>>                 return Math.random() < 0.5;
>>             }
>> 
>>             public Object next() {
>>                 if (Math.random() < 0.25) {
>>                     array[i++] = null;
>>                     return new Object();
>>                 } else {
>>                     return array[i++];
>>                 }                 
>>             }
>>         };
>>     }
>> }
>> 
>> 
>> But who cares? Since its implementation is incorrect, it is normal for it to 
>> suffer for itself. We only need to prevent errors from being leaked to other 
>> places, rather than defending against all errors.
>
> @Glavo Then why doesn't `ArrayList` trust `toArray()`? If all implementations 
> behave correctly, then it should return an `Object[]` independent of the 
> original collection, so `ArrayList` should trust it. Those who doesn't 
> implement `toArray()` correctly should use these methods at their own risk, 
> shouldn't they?
> 
> This PR modifies a class that is used by nearly every JVM code, so safety is 
> more important than performance.

@yuantj As I mentioned earlier, we need to prevent errors from leaking to other 
places, rather than defending against all errors.

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

PR Comment: https://git.openjdk.org/jdk/pull/13383#issuecomment-1501404519

Reply via email to