On Wed, 16 Dec 2020 01:32:53 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:

>> The agent class doesn't have to be public it just has to be accessible.
>> 
>> The premain method should be queried for public modifier rather than just 
>> relying on a failed invocation request.
>
> David, thank you for catching this. I'm probably missing something here.
> If the agent class is not public then the `m.canAccess(null)` check is not 
> passed and IAE is thrown with the message:
>   `Exception in thread "main" java.lang.IllegalAccessException: method 
> NonPublicAgent.premain must be declared public`
> 
> But the `NonPublicAgent.premain` is declared public as below:
>     public static void premain(String agentArgs, Instrumentation inst) {
>         System.out.println("premain: NonPublicAgent was loaded");
>     }
> It seems, the IAE is thrown because the agent class is not public.
> Does it mean the `m.canAccess(null)` check is not fully correct?

Thanks, David!
Yes, I was also thinking that the setAccessible has to be remained after all 
the checks.

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

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

Reply via email to