JVM_DoPrivileged calls run()Ljava/lang/Object;
It searches in the "action" class and superclasses for the method, but
does not search for inherited default methods.
Bug reported by Michael Rasmussen@zeroturnaround.com on security-dev@openjdk.java.net and forwarded by Sean Mullan:
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)
It searches in the "action" class and superclasses for the method, but
does not search for inherited default methods.
Bug reported by Michael Rasmussen@zeroturnaround.com on security-dev@openjdk.java.net and forwarded by Sean Mullan:
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)