On Thu, 12 Feb 2026 20:20:33 GMT, Frederic Parain <[email protected]> wrote:

>> First batch of changes to remove potentially dangerous calls to 
>> objArrayOopDesc::obj_at().
>> Changes are more extensive than intended. In most cases, code modifications 
>> consist in using a refArrayOop type instead of a objArrayOop type, because 
>> most of the arrays the JVM deals with for its own purpose are always 
>> reference arrays (because they are arrays of identity type elements). The 
>> patch also adds a new API allowing the VM to request the allocation of a 
>> reference array.
>> Code dealing with user provided arrays must be ready to handle exceptions 
>> when accessing objArrays.
>> 
>> This is a short term fix, fixing a few bugs, and trying to make the code 
>> more robust using the meta-data types. For the long term, a better solution 
>> is needed. Accesses to both arrays and fields are becoming more and more 
>> complex because of the introduction of flattening, multiple layouts, 
>> additional properties. Forcing enforcement at each access would be expensive 
>> and wasteful, as the JVM usually operates on well-known objects or arrays. 
>> But because of the increasing complexity, having a way to quickly check the 
>> validity of an access would help making the VM code more robust.
>
> Frederic Parain has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Fix search of specific array klass

src/hotspot/share/memory/oopFactory.cpp line 127:

> 125:   // Cast below must pass because the array description required a 
> RefArrayKlass
> 126:   RefArrayKlass* rak = RefArrayKlass::cast(oak);
> 127:   oop array = rak->allocate_instance(length, properties, CHECK_NULL);

While looking at why we have all three 
`[Obj|Ref|Flat]ArrayKlass::allocate_instance` functions I realize that this 
will most likely make a virtual call to `ObjArrayKlass::allocate_instance`. If 
you want to call directly into `RefArrayKlass` this could be changed to:

Suggestion:

  oop array = rak->RefArrayKlass::allocate_instance(length, properties, 
CHECK_NULL);


This is probably not super important, but I wanted to mention it because this 
was not obvious to me upon first reading of this function.

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

PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2033#discussion_r2804867604

Reply via email to