On Fri, 12 Feb 2021 22:48:51 GMT, Mandy Chung <mch...@openjdk.org> wrote:

>> This more limited cleanup looks good.
>
> This patch changes `JVM_FindLoadedClass` interface to only accept a binary 
> name.   It used to accept both a binary name and internal form.  Most, if not 
> all, JVM entry points take the name of internal name.   So this change makes 
> this JVM entry point inconsistent with others. 
> 
> Looking closer each API that involves `fixClassName` or `verifyXXXClassName`, 
> the JVM entry points called expects the internal form except 
> `JVM_FindLoadedClass` (see details below).   I think a better change is to 
> change the native `JVM_FindLoadedClass` to accept the internal form only and 
> have `findLoadedClass0` method to detect if the name contains '/' or '['.    
> 
> ClassLoader API does not allow loading of an array type whereas 
> `Class::forName` allows to find an array type.  Perhaps `verifyFixClassName` 
> should be renamed like `binaryNameToInternalForm`.   I think we don't need 
> `fixClassname`?
> 
> ClassLoader::defineClass
> - `preDefineClass` checks the name and throws if it contains '/' or '['
> - no name check in `JVM_DefineClassWithSource` and `JVM_LookupDefineClass`
>      which expects the name is of internal form
> 
> native Class::forName0
> - converts the binary name to internal form (i.e. replace '.' with '/') 
> - throw if the name contains '/'
>  - no explicit name check in `JVM_FindClassFromCaller`
> 
> ClassLoader::loadClass
> - calls native `findLoadedClass0` that calls `JVM_FindLoadedClass` which      
>   
>    accepts binary form and converts '.' to '/' but the current implementation
>    accepts both binary name and internal form
> - calls `native findBootstrapClass` which converts '.' to '/' and pass the 
> internal
>    form to `JVM_FindBootstrapClass`.  
> 
> It'd be helpful to document the internal APIs and JVM entry points clearly 
> what it expects for example binary name vs internal form and where it does 
> the validation e.g. Class::forName0 allows array type and native library 
> methods do the name validation.

Abandoning this. Sorry for wasting everyone's time.

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

PR: https://git.openjdk.java.net/jdk/pull/2378

Reply via email to