Skip to content

Commit a542750

Browse files
committed
Make sandbox scope less
1 parent ebe8669 commit a542750

File tree

5 files changed

+17
-19
lines changed

5 files changed

+17
-19
lines changed

utbot-framework/src/main/kotlin/org/utbot/framework/concrete/MockValueConstructor.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ import org.mockito.Mockito
4545
import org.mockito.stubbing.Answer
4646
import org.objectweb.asm.Type
4747
import org.utbot.common.withAccessibility
48-
import java.security.AccessController
49-
import java.security.PrivilegedAction
5048

5149
/**
5250
* Constructs values (including mocks) from models.
@@ -226,7 +224,7 @@ class MockValueConstructor(
226224
}
227225

228226
private fun generateMockitoMock(clazz: Class<*>, mocks: Map<ExecutableId, List<UtModel>>): Any {
229-
return AccessController.doPrivileged(PrivilegedAction { Mockito.mock(clazz, generateMockitoAnswer(mocks)) })
227+
return Mockito.mock(clazz, generateMockitoAnswer(mocks))
230228
}
231229

232230
private fun computeConcreteValuesForMethods(

utbot-framework/src/main/kotlin/org/utbot/framework/concrete/UtModelConstructor.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ import org.utbot.framework.plugin.api.util.objectClassId
3030
import org.utbot.framework.plugin.api.util.shortClassId
3131
import org.utbot.framework.util.valueToClassId
3232
import java.lang.reflect.Modifier
33-
import java.security.AccessController
34-
import java.security.PrivilegedAction
3533
import java.util.IdentityHashMap
3634

3735
/**
@@ -83,7 +81,7 @@ internal class UtModelConstructor(
8381
*
8482
* Handles cache on stateBefore values.
8583
*/
86-
override fun construct(value: Any?, classId: ClassId): UtModel = AccessController.doPrivileged(PrivilegedAction {
84+
override fun construct(value: Any?, classId: ClassId): UtModel =
8785
when (value) {
8886
null -> UtNullModel(classId)
8987
is Unit -> UtVoidModel
@@ -108,7 +106,6 @@ internal class UtModelConstructor(
108106
is Class<*> -> constructFromClass(value)
109107
else -> constructFromAny(value)
110108
}
111-
})
112109

113110
// Q: Is there a way to get rid of duplicated code?
114111

utbot-instrumentation/src/main/kotlin/org/utbot/instrumentation/instrumentation/InvokeInstrumentation.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.utbot.instrumentation.instrumentation
22

33
import org.utbot.common.withAccessibility
44
import org.utbot.framework.plugin.api.util.signature
5+
import org.utbot.instrumentation.process.sandbox
56
import java.lang.reflect.Constructor
67
import java.lang.reflect.InvocationTargetException
78
import java.lang.reflect.Method
@@ -54,7 +55,7 @@ class InvokeInstrumentation : Instrumentation<Result<*>> {
5455
is Method ->
5556
withAccessibility {
5657
runCatching {
57-
invoke(thisObject, *realArgs.toTypedArray()).let {
58+
sandbox { invoke(thisObject, *realArgs.toTypedArray()) }.let {
5859
if (returnType != Void.TYPE) it else Unit
5960
} // invocation on method returning void will return null, so we replace it with Unit
6061
}
@@ -63,7 +64,7 @@ class InvokeInstrumentation : Instrumentation<Result<*>> {
6364
is Constructor<*> ->
6465
withAccessibility {
6566
runCatching {
66-
newInstance(*realArgs.toTypedArray())
67+
sandbox { newInstance(*realArgs.toTypedArray()) }
6768
}
6869
}
6970

utbot-instrumentation/src/main/kotlin/org/utbot/instrumentation/process/ChildProcess.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ private fun loop(instrumentation: Instrumentation<*>) {
134134
}
135135
System.err.println("warmup finished in $time ms")
136136
}
137-
is Protocol.InvokeMethodCommand -> sandbox {
137+
is Protocol.InvokeMethodCommand -> {
138138
val resultCmd = try {
139139
val clazz = HandlerClassesLoader.loadClass(cmd.className)
140140
val res = instrumentation.invoke(

utbot-instrumentation/src/main/kotlin/org/utbot/instrumentation/process/Security.kt

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ import java.security.PermissionCollection
1313
import java.security.Permissions
1414
import java.security.Policy
1515
import java.security.PrivilegedAction
16+
import java.security.PrivilegedActionException
1617
import java.security.ProtectionDomain
1718
import java.security.cert.Certificate
18-
import java.util.PropertyPermission
1919

2020
internal fun permissions(block: SimplePolicy.() -> Unit) {
2121
val policy = Policy.getPolicy()
@@ -52,8 +52,11 @@ internal fun <T> sandbox(block: () -> T): T {
5252
internal fun <T> sandbox(file: URI, block: () -> T): T {
5353
val path = Paths.get(file)
5454
val perms = mutableListOf<Permission>(
55-
RuntimePermission("*"),
56-
PropertyPermission("org.mockito.internal.*", "read,write"),
55+
RuntimePermission("accessDeclaredMembers"),
56+
RuntimePermission("getProtectionDomain"),
57+
RuntimePermission("accessClassInPackage.*"),
58+
RuntimePermission("getClassLoader"),
59+
RuntimePermission("reflectionFactoryAccess"),
5760
ReflectPermission("*"),
5861
)
5962
val allCodeSource = CodeSource(null, emptyArray<Certificate>())
@@ -72,12 +75,11 @@ internal fun <T> sandbox(permission: List<Permission>, cs: CodeSource, block: ()
7275

7376
internal fun <T> sandbox(perms: PermissionCollection, cs: CodeSource, block: () -> T): T {
7477
val acc = AccessControlContext(arrayOf(ProtectionDomain(cs, perms)))
75-
return AccessController.doPrivileged(
76-
PrivilegedAction {
77-
block()
78-
},
79-
acc
80-
)
78+
return try {
79+
AccessController.doPrivileged(PrivilegedAction { block() }, acc)
80+
} catch (e: PrivilegedActionException) {
81+
throw e.exception
82+
}
8183
}
8284

8385
/**

0 commit comments

Comments
 (0)