[BT] Use bootstrap classloader as a fallback instead of system classloader
Using system classloader may lead to unwanted leakage of classes from the application classpath (like Gradle's ones). #KT-61206 Fixed
This commit is contained in:
committed by
Space Team
parent
4705f13b39
commit
797ca34a34
+1
-3
@@ -19,7 +19,6 @@ import kotlin.reflect.KClass
|
||||
@JvmName("newInstance")
|
||||
public fun SharedApiClassesClassLoader(): ClassLoader = SharedApiClassesClassLoaderImpl(
|
||||
SharedApiClassesClassLoaderImpl::class.java.classLoader,
|
||||
ClassLoader.getSystemClassLoader(),
|
||||
SharedApiClassesClassLoaderImpl::class.java.`package`.name,
|
||||
)
|
||||
|
||||
@@ -32,9 +31,8 @@ internal fun <T : Any> loadImplementation(cls: KClass<T>, classLoader: ClassLoad
|
||||
|
||||
private class SharedApiClassesClassLoaderImpl(
|
||||
private val parent: ClassLoader,
|
||||
fallback: ClassLoader,
|
||||
private val allowedPackage: String,
|
||||
) : ClassLoader(fallback) {
|
||||
) : ClassLoader(null) { // `null` parent means that the parent is the bootstrap classloader
|
||||
override fun loadClass(name: String, resolve: Boolean): Class<*> {
|
||||
return if (name.startsWith(allowedPackage)) {
|
||||
parent.loadClass(name)
|
||||
|
||||
Reference in New Issue
Block a user