AccessController.doPrivileged and default methods

Adam Petcher adam.petcher at oracle.com
Wed Jul 5 20:01:48 UTC 2017


Very interesting. The exception originates in the VM, so I added the 
hotspot-dev list to the discussion. It looks like the VM either can't 
find the method, or it decides that it's not the right kind of method.

On 7/4/2017 7:57 AM, Michael Rasmussen wrote:
> Hi
>
> I was playing around with having an easy way to have doPrivileged call
> void methods via lambdas/method references, and noticed that if you
> use AccessController.doPrivileged(PrivilegedAction), and the run
> method is implemented as a default method, then you get the following
> exception: java.lang.InternalError: No run method
>
> I failed finding anywhere in the documentation stating this should not
> be supported, or a bug report about it, so writing/asking here.
>
> See example code below
>
> Kind regards
> Michael Rasmussen
>
>
> //----
>
> package com.test;
>
> import java.security.AccessController;
> import java.security.PrivilegedAction;
>
> public class Test {
>    interface VoidPrivilegedAction extends PrivilegedAction<Void> {
>      void perform();
>
>      @Override
>      default Void run() {
>        perform();
>        return null;
>      }
>    }
>
>    static void doPrivileged(VoidPrivilegedAction act) {
>      AccessController.doPrivileged(act);
>    }
>
>    public static void main(String[] args) throws Exception {
>      doPrivileged(() -> System.out.println(System.getProperty("java.home")));
>    }
> }
>
> //----
>
> Exception in thread "main" java.lang.InternalError: No run method
> at java.security.AccessController.doPrivileged(Native Method)
> at com.test.Test.doPrivileged(Test.java:18)
> at com.test.Test.main(Test.java:22)



More information about the security-dev mailing list