On Thu, 3 Jun 2021 17:44:22 GMT, Bradford Wetmore <wetm...@openjdk.org> wrote:

>> src/java.base/share/classes/javax/crypto/JceSecurityManager.java line 111:
>> 
>>> 109:                                 Option.RETAIN_CLASS_REFERENCE)
>>> 110:                                 .walk((s) -> 
>>> s.collect(Collectors.toList())));
>>> 111: 
>> 
>> Note: StackWalker is a stateless capability object. It's not the walk() 
>> method that requires a permission, but the creation of the StackWalker 
>> itself (hence my suggestion to create it in the constructor, or in a static 
>> initializer). If you walk the stack from within a doPrivileged call then the 
>> doPrivileged frame will appear in the returned `List<StackFrame>`; this may 
>> (or may not) be OK - depending on the logic that processes the stack.
>> 
>> You could consider simplifying:
>> 
>> 
>> PrivilegedAction<StackWalker> pa = () -> 
>> StackWalker.getInstance(Option.RETAIN_CLASS_REFERENCE);
>> final List<StackFrame> stack = 
>> AccessController.doPrivileged(pa).walk(Stream::toList);
>
> Thanks.  I was going to step through this code more thoroughly today, 
> hopefully I would have caught that.  
> 
> This code is only needed in certain deployment and Cipher creation 
> situations, so would rather not create a static CodeWalker that is not 
> normally used.

Fair enough.

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

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

Reply via email to