Skip to content

Exception from SecurityManager in static constructor is considered as Concrete Executor result #1679

Open
@Domonion

Description

@Domonion

Description

Exception in Instrumented process which is produced (may be transitively) by SecurityManager when concrete executing class static constructor is considered as a Concrete Executor result, which causes incorrect tests.

To Reproduce

Steps to reproduce the behavior:

  1. Turn on sandbox in ContestEstimator - org.utbot.contest.ContestKt#setOptions
  2. OPTIONALLY: Use only spoon-core-7.0.0 in projectFilter - org.utbot.contest.ContestEstimatorKt#main
  3. Set JDK 8 in org.utbot.contest.ContestEstimatorKt#javaHome and ContestEstimatorKt run configuration
  4. OPTIONALLY: shorten list utbot-junit-contest/src/main/resources/classes/spoon-core-7.0.0/list to following:
spoon.support.DefaultCoreFactory
spoon.support.reflect.code.CtAssignmentImpl
  1. Add timeLimit to 100 - org.utbot.contest.ContestEstimatorKt#main
  2. Run ContestEstimator

Use OPTIONALLY steps to speed up repro.

Expected behavior

Tests are supposed to be generated.

Actual behavior

An error test is generated for spoon.support.DefaultCoreFactory and nothing for spoon.support.reflect.code.CtAssignmentImpl. Also following exceptions are thrown:

  1. In ContestEstimator:
Exception in thread "SymbolicExecution" org.utbot.instrumentation.util.InstrumentedProcessError: Error in the instrumented process |> com.jetbrains.rd.util.reactive.RdFault: spoon.support.reflect.declaration.CtElementImpl, reason: java.lang.NoClassDefFoundError: spoon.support.reflect.declaration.CtElementImpl
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2729)
	at java.lang.Class.getDeclaredMethods(Class.java:2003)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt$singleMethodOrNull$2.invoke(SignatureUtil.kt:79)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt$singleMethodOrNull$2.invoke(SignatureUtil.kt:78)
	at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:210)
	at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:170)
	at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:194)
	at kotlin.sequences.SequencesKt___SequencesKt.firstOrNull(_Sequences.kt:168)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt.singleMethodOrNull(SignatureUtil.kt:80)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt.singleExecutableIdOrNull(SignatureUtil.kt:102)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt.singleExecutableId(SignatureUtil.kt:94)
	at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:126)
	at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:96)
	at org.utbot.instrumentation.process.InstrumentedProcessMainKt$setup$2.invoke(InstrumentedProcessMain.kt:128)
	at org.utbot.instrumentation.process.InstrumentedProcessMainKt$setup$2.invoke(InstrumentedProcessMain.kt:124)
	at org.utbot.rd.IdleWatchdog$wrapActiveCall$1$1.invoke(ClientProcessUtil.kt:96)
	at org.utbot.rd.IdleWatchdog.wrapActive(ClientProcessUtil.kt:83)
	at org.utbot.rd.IdleWatchdog$wrapActiveCall$1.invoke(ClientProcessUtil.kt:95)
	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:182)
	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:173)
	at com.jetbrains.rd.framework.impl.RdCall.onWireReceived(RdTask.kt:360)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:57)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:12)
	at com.jetbrains.rd.framework.impl.ProtocolContexts.readMessageContextAndInvoke(ProtocolContexts.kt:151)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:56)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:12)
	at com.jetbrains.rd.util.threading.SingleThreadSchedulerBase$queue$1.run(SingleThreadScheduler.kt:41)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)

	at com.jetbrains.rd.framework.RdTaskResult$Companion.read(TaskInterfaces.kt:30)
	at com.jetbrains.rd.framework.impl.CallSiteWiredRdTask.onWireReceived(RdTask.kt:104)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:57)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:12)
	at com.jetbrains.rd.framework.impl.ProtocolContexts.readMessageContextAndInvoke(ProtocolContexts.kt:151)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:56)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:12)
	at com.jetbrains.rd.framework.impl.RdCall$createResponseScheduler$1$queue$1.invoke(RdTask.kt:278)
	at com.jetbrains.rd.framework.impl.RdCall$createResponseScheduler$1$queue$2.invokeSuspend(RdTask.kt:287)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)

	at org.utbot.instrumentation.ConcreteExecutor.withProcess(ConcreteExecutor.kt:227)
	at org.utbot.instrumentation.ConcreteExecutor$withProcess$1.invokeSuspend(ConcreteExecutor.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)
	Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [UtContext(classLoader=java.net.URLClassLoader@712625fd, hashCode=1387426343), StandaloneCoroutine{Cancelling}@3d71ad65, java.util.concurrent.ScheduledThreadPoolExecutor@24c1fb09[Running, pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 44]]
Caused by: com.jetbrains.rd.util.reactive.RdFault: spoon.support.reflect.declaration.CtElementImpl, reason: java.lang.NoClassDefFoundError: spoon.support.reflect.declaration.CtElementImpl
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2729)
	at java.lang.Class.getDeclaredMethods(Class.java:2003)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt$singleMethodOrNull$2.invoke(SignatureUtil.kt:79)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt$singleMethodOrNull$2.invoke(SignatureUtil.kt:78)
	at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:210)
	at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:170)
	at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:194)
	at kotlin.sequences.SequencesKt___SequencesKt.firstOrNull(_Sequences.kt:168)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt.singleMethodOrNull(SignatureUtil.kt:80)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt.singleExecutableIdOrNull(SignatureUtil.kt:102)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt.singleExecutableId(SignatureUtil.kt:94)
	at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:126)
	at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:96)
	at org.utbot.instrumentation.process.InstrumentedProcessMainKt$setup$2.invoke(InstrumentedProcessMain.kt:128)
	at org.utbot.instrumentation.process.InstrumentedProcessMainKt$setup$2.invoke(InstrumentedProcessMain.kt:124)
	at org.utbot.rd.IdleWatchdog$wrapActiveCall$1$1.invoke(ClientProcessUtil.kt:96)
	at org.utbot.rd.IdleWatchdog.wrapActive(ClientProcessUtil.kt:83)
	at org.utbot.rd.IdleWatchdog$wrapActiveCall$1.invoke(ClientProcessUtil.kt:95)
	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:182)
	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:173)
	at com.jetbrains.rd.framework.impl.RdCall.onWireReceived(RdTask.kt:360)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:57)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:12)
	at com.jetbrains.rd.framework.impl.ProtocolContexts.readMessageContextAndInvoke(ProtocolContexts.kt:151)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:56)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:12)
	at com.jetbrains.rd.util.threading.SingleThreadSchedulerBase$queue$1.run(SingleThreadScheduler.kt:41)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)

	at com.jetbrains.rd.framework.RdTaskResult$Companion.read(TaskInterfaces.kt:30)
	at com.jetbrains.rd.framework.impl.CallSiteWiredRdTask.onWireReceived(RdTask.kt:104)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:57)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:12)
	at com.jetbrains.rd.framework.impl.ProtocolContexts.readMessageContextAndInvoke(ProtocolContexts.kt:151)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:56)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:12)
	at com.jetbrains.rd.framework.impl.RdCall$createResponseScheduler$1$queue$1.invoke(RdTask.kt:278)
	at com.jetbrains.rd.framework.impl.RdCall$createResponseScheduler$1$queue$2.invokeSuspend(RdTask.kt:287)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	... 7 more
  1. In InstrumentedProcess:
18:43:24.478 | DEBUG | InstrumentedProcess       | received invokeMethod request: spoon.support.reflect.code.CtAssignmentImpl, setAssigned(Lspoon/reflect/code/CtExpression;)Lspoon/reflect/code/CtAssignment; 
18:43:24.478 | DEBUG | InstrumentedProcess       | invokeMethod failure 
18:43:24.478 | ERROR | InstrumentedProcess       |  | java.lang.NoClassDefFoundError: spoon.support.reflect.declaration.CtElementImpl
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2729)
	at java.lang.Class.getDeclaredMethods(Class.java:2003)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt$singleMethodOrNull$2.invoke(SignatureUtil.kt:79)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt$singleMethodOrNull$2.invoke(SignatureUtil.kt:78)
	at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:210)
	at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:170)
	at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:194)
	at kotlin.sequences.SequencesKt___SequencesKt.firstOrNull(_Sequences.kt:168)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt.singleMethodOrNull(SignatureUtil.kt:80)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt.singleExecutableIdOrNull(SignatureUtil.kt:102)
	at org.utbot.framework.plugin.api.util.SignatureUtilKt.singleExecutableId(SignatureUtil.kt:94)
	at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:126)
	at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:96)
	at org.utbot.instrumentation.process.InstrumentedProcessMainKt$setup$2.invoke(InstrumentedProcessMain.kt:128)
	at org.utbot.instrumentation.process.InstrumentedProcessMainKt$setup$2.invoke(InstrumentedProcessMain.kt:124)
	at org.utbot.rd.IdleWatchdog$wrapActiveCall$1$1.invoke(ClientProcessUtil.kt:96)
	at org.utbot.rd.IdleWatchdog.wrapActive(ClientProcessUtil.kt:83)
	at org.utbot.rd.IdleWatchdog$wrapActiveCall$1.invoke(ClientProcessUtil.kt:95)
	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:182)
	at com.jetbrains.rd.framework.IRdEndpoint$set$1.invoke(TaskInterfaces.kt:173)
	at com.jetbrains.rd.framework.impl.RdCall.onWireReceived(RdTask.kt:360)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:57)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2$2.invoke(MessageBroker.kt:12)
	at com.jetbrains.rd.framework.impl.ProtocolContexts.readMessageContextAndInvoke(ProtocolContexts.kt:151)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:56)
	at com.jetbrains.rd.framework.MessageBroker$invoke$2.invoke(MessageBroker.kt:12)
	at com.jetbrains.rd.util.threading.SingleThreadSchedulerBase$queue$1.run(SingleThreadScheduler.kt:41)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)

The thing is that is you will debug concrete execution of first method in DefaultCoreFactory you will see following exception in concrete execution:

java.lang.ExceptionInInitializerError
	at spoon.Launcher.defineArgs(Launcher.java:214)
	at spoon.Launcher.<clinit>(Launcher.java:145)
	at spoon.support.StandardEnvironment.<init>(StandardEnvironment.java:87)
	at spoon.support.reflect.declaration.CtElementImpl.<clinit>(CtElementImpl.java:93)
	at spoon.support.DefaultCoreFactory.createParameterReference(DefaultCoreFactory.java:539)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.utbot.instrumentation.instrumentation.InvokeInstrumentation$invoke$2$result$1.invoke-IoAF18A(InvokeInstrumentation.kt:61)
	at org.utbot.instrumentation.instrumentation.InvokeInstrumentation$invoke$2$result$1.invoke(InvokeInstrumentation.kt:59)
	at org.utbot.instrumentation.process.SecurityKt$runSandbox$1$1.invoke(Security.kt:38)
	at org.utbot.instrumentation.process.SecurityKt$sandbox$1.invoke(Security.kt:61)
	at org.utbot.instrumentation.process.SecurityKt$sandbox$2.invoke(Security.kt:77)
	at org.utbot.instrumentation.process.SecurityKt$sandbox$3.invoke(Security.kt:82)
	at org.utbot.instrumentation.process.SecurityKt$sandbox$4.run(Security.kt:88)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.utbot.instrumentation.process.SecurityKt.sandbox(Security.kt:88)
	at org.utbot.instrumentation.process.SecurityKt.sandbox(Security.kt:82)
	at org.utbot.instrumentation.process.SecurityKt.sandbox(Security.kt:77)
	at org.utbot.instrumentation.process.SecurityKt.sandbox(Security.kt:61)
	at org.utbot.instrumentation.process.SecurityKt.runSandbox(Security.kt:38)
	at org.utbot.instrumentation.instrumentation.InvokeInstrumentation.invoke-BWLJW6A(InvokeInstrumentation.kt:59)
	at org.utbot.instrumentation.instrumentation.InvokeInstrumentation.invoke(InvokeInstrumentation.kt:21)
	at org.utbot.instrumentation.instrumentation.Instrumentation$DefaultImpls.invoke$default(Instrumentation.kt:21)
	at org.utbot.framework.concrete.phases.InvocationContext$invoke$concreteResult$1.invoke(InvocationContext.kt:36)
	at org.utbot.common.ThreadBasedExecutor$invokeWithTimeout$2.invoke(ThreadUtil.kt:56)
	at org.utbot.common.ThreadBasedExecutor$invokeWithTimeout$1.invoke(ThreadUtil.kt:47)
	at org.utbot.common.ThreadBasedExecutor$invokeWithTimeout$1.invoke(ThreadUtil.kt:43)
	at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:30)
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "com.martiansoftware.jsap.usenbsp" "read")
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
	at java.security.AccessController.checkPermission(AccessController.java:886)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
	at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1294)
	at java.lang.System.getProperty(System.java:769)
	at com.martiansoftware.jsap.JSAP.<clinit>(Unknown Source)
	... 30 more

Additional context

If you change order of classes in step 4 - everything will work.
I believe it is required to correctly diagnose and signal that there is exception in static constructor from SecurityManager in Instrumeted process.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Status

Todo

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions