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

AccessControlException when a SecurityManager is installed #144

Open
sorincarbunaru opened this issue Mar 3, 2025 · 1 comment
Open

Comments

@sorincarbunaru
Copy link

Version

7.1.0

Operating System

Windows

Bug description

We have a Git Client add-on for Oxygen XML Editor, built on top of JGit. Oxygen uses a SecurityManager. Everything worked fine until we updated JGit from 7.0.0 to 7.1.0. Now we get an AccessControlException when we start Oxygen.

Actual behavior

Oxygen cannot start and we get the exception from Relevant log output.

Expected behavior

The error should not happen.

Relevant log output

Exception in thread "pool-3-thread-1" java.lang.NoClassDefFoundError: Could not initialize class ch.qos.logback.core.CoreConstants
        at ch.qos.logback.classic.pattern.LineSeparatorConverter.convert(LineSeparatorConverter.java:22)
        at ch.qos.logback.classic.pattern.LineSeparatorConverter.convert(LineSeparatorConverter.java:19)
        at ch.qos.logback.core.pattern.FormattingConverter.write(FormattingConverter.java:36)
        at ch.qos.logback.core.pattern.PatternLayoutBase.writeLoopOnConverters(PatternLayoutBase.java:116)
        at ch.qos.logback.classic.PatternLayout.doLayout(PatternLayout.java:176)
        at ch.qos.logback.classic.PatternLayout.doLayout(PatternLayout.java:39)
        at ch.qos.logback.core.encoder.LayoutWrappingEncoder.encode(LayoutWrappingEncoder.java:114)
        at ch.qos.logback.core.OutputStreamAppender.writeOut(OutputStreamAppender.java:192)
        at ch.qos.logback.core.OutputStreamAppender.subAppend(OutputStreamAppender.java:237)
        at ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:102)
        at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:85)
        at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:51)
        at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:272)
        at ch.qos.logback.classic.Logger.callAppenders(Logger.java:259)
        at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:426)
        at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:386)
        at ch.qos.logback.classic.Logger.error(Logger.java:543)
        at com.oxygenxml.git.service.x$1.afterExecute(x.java)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1139)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.ExceptionInInitializerError: Exception java.security.AccessControlException: access denied ("java.util.PropertyPermission" "line.separator" "read") [in thread "ForkJoinPool.commonPool-worker-1"]
        at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:485)
        at java.base/java.security.AccessController.checkPermission(AccessController.java:1068)
        at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:416)
        at ro.sync.security.manager.q.checkPermissionInternal(q.java)
        at ro.sync.security.manager.q.checkPermission(q.java)
        at java.base/java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1160)
        at java.base/java.lang.System.getProperty(System.java:929)
        at ch.qos.logback.core.CoreConstants.<clinit>(CoreConstants.java:44)
        at ch.qos.logback.classic.pattern.LineSeparatorConverter.convert(LineSeparatorConverter.java:22)
        at ch.qos.logback.classic.pattern.LineSeparatorConverter.convert(LineSeparatorConverter.java:19)
        at ch.qos.logback.core.pattern.FormattingConverter.write(FormattingConverter.java:36)
        at ch.qos.logback.core.pattern.PatternLayoutBase.writeLoopOnConverters(PatternLayoutBase.java:116)
        at ch.qos.logback.classic.PatternLayout.doLayout(PatternLayout.java:176)
        at ch.qos.logback.classic.PatternLayout.doLayout(PatternLayout.java:39)
        at ch.qos.logback.core.encoder.LayoutWrappingEncoder.encode(LayoutWrappingEncoder.java:114)
        at ch.qos.logback.core.OutputStreamAppender.writeOut(OutputStreamAppender.java:192)
        at ch.qos.logback.core.OutputStreamAppender.subAppend(OutputStreamAppender.java:237)
        at ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:102)
        at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:85)
        at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:51)
        at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:272)
        at ch.qos.logback.classic.Logger.callAppenders(Logger.java:259)
        at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:426)
        at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:386)
        at ch.qos.logback.classic.Logger.error(Logger.java:543)
        at org.eclipse.jgit.util.FS$FileStoreAttributes.lambda$5(FS.java:442)
        at java.base/java.util.concurrent.CompletableFuture.uniExceptionally(CompletableFuture.java:990)
        at java.base/java.util.concurrent.CompletableFuture$UniExceptionally.tryFire(CompletableFuture.java:974)
        at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
        at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1773)
        at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1760)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)

Other information

I think the fix is to be done on org.eclipse.jgit.util.FS.FileStoreAttributes.getFileStoreAttributes(Path). When creating CompletableFuture<Optional<FileStoreAttributes>> f, insead of calling java.util.concurrent.CompletableFuture.supplyAsync(Supplier<U>), try using the other signature, java.util.concurrent.CompletableFuture.supplyAsync(Supplier<U>, Executor) and for the second param pass a thread pool other than java.util.concurrent.ForkJoinPool.commonPool(), for example Executors.newFixedThreadPool(1).

@msohn
Copy link
Member

msohn commented Mar 3, 2025

In JGit 7.1 we removed all usage of SecurityManager and AccessController APIs which are deprecated for removal since Java 17.
See https://eclipse.gerrithub.io/c/eclipse-jgit/jgit/+/1203402

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants