Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RubyInstanceConfig#setupEnvironment throws AccessControlException on Windows #3220

Closed
trejkaz opened this Issue Aug 4, 2015 · 4 comments

Comments

Projects
None yet
4 participants
@trejkaz
Copy link

commented Aug 4, 2015

Just trying to create a script engine:

    ScriptEngine engine = new JRubyEngineFactory().getScriptEngine();

fails with an AccessControlException in JRuby 9.0.0.0 on Windows:

java.security.AccessControlException: access denied ("java.io.FilePermission" "uri:classloader:\META-INF\jruby.home" "read")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:457)
    at java.security.AccessController.checkPermission(AccessController.java:884)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
    at java.io.File.exists(File.java:814)
    at org.jruby.RubyInstanceConfig.setupEnvironment(RubyInstanceConfig.java:674)
    at org.jruby.RubyInstanceConfig.<init>(RubyInstanceConfig.java:123)
    at org.jruby.embed.internal.AbstractLocalContextProvider.getGlobalRuntimeConfigOrNew(AbstractLocalContextProvider.java:95)
    at org.jruby.embed.internal.SingletonLocalContextProvider.initLocalContext(SingletonLocalContextProvider.java:56)
    at org.jruby.embed.internal.SingletonLocalContextProvider.getProvider(SingletonLocalContextProvider.java:49)
    at org.jruby.embed.ScriptingContainer.getProviderInstance(ScriptingContainer.java:267)
    at org.jruby.embed.ScriptingContainer.<init>(ScriptingContainer.java:245)
    at org.jruby.embed.jsr223.JRubyEngineFactory.getScriptEngine(JRubyEngineFactory.java:170)

RubyInstanceConfig#setupEnvironment is calling File#exists but fails to catch the potential exception from this method:

private void setupEnvironment(String jrubyHome) {
    if (!new File(jrubyHome).exists() && !environment.containsKey("RUBY")) {
        ...
    }
}

But in this situation, jrubyHome isn't even a file path, it's a URI.

I could add a quick check here that the path doesn't start with "uri:", but it isn't clear what the correct behaviour should be in this situation. Should the code be properly checking that the URI exists?

@kares

This comment has been minimized.

Copy link
Member

commented Aug 4, 2015

@mkristian

This comment has been minimized.

Copy link
Member

commented Aug 4, 2015

having a positive check for a uri-like path using something like https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/RubyFile.java#L637
seems better suited. the check is meant to determine whether jruby gets executed from within a jar or not.

@kares

This comment has been minimized.

Copy link
Member

commented Aug 4, 2015

OK, that PATTERN matching could be shared at package level ... was mostly interested in avoiding the (anticipated) regression the commit(s) has introduced but if you're to change that to avoid the new File anyways its all yours ... please fix it on 1.7 as well, thanks

mkristian added a commit that referenced this issue Aug 4, 2015

improve test on whether jrubyHome is inside a jar
this fixes issue #3220

Sponsored by Lookout Inc.

@headius headius added this to the JRuby 9.0.1.0 milestone Aug 6, 2015

@kares

This comment has been minimized.

Copy link
Member

commented Aug 6, 2015

fixed both at jruby-1_7 and master ... by @mkristian

@kares kares closed this Aug 6, 2015

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.