On Mon, 10 Apr 2023 04:57:09 GMT, Glavo <d...@openjdk.org> wrote:

>> Tingjun Yuan has updated the pull request incrementally with one additional 
>> commit since the last revision:
>> 
>>   Add benchmark
>
> 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.

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

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

Reply via email to