[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")
|
@JvmName("newInstance")
|
||||||
public fun SharedApiClassesClassLoader(): ClassLoader = SharedApiClassesClassLoaderImpl(
|
public fun SharedApiClassesClassLoader(): ClassLoader = SharedApiClassesClassLoaderImpl(
|
||||||
SharedApiClassesClassLoaderImpl::class.java.classLoader,
|
SharedApiClassesClassLoaderImpl::class.java.classLoader,
|
||||||
ClassLoader.getSystemClassLoader(),
|
|
||||||
SharedApiClassesClassLoaderImpl::class.java.`package`.name,
|
SharedApiClassesClassLoaderImpl::class.java.`package`.name,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -32,9 +31,8 @@ internal fun <T : Any> loadImplementation(cls: KClass<T>, classLoader: ClassLoad
|
|||||||
|
|
||||||
private class SharedApiClassesClassLoaderImpl(
|
private class SharedApiClassesClassLoaderImpl(
|
||||||
private val parent: ClassLoader,
|
private val parent: ClassLoader,
|
||||||
fallback: ClassLoader,
|
|
||||||
private val allowedPackage: String,
|
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<*> {
|
override fun loadClass(name: String, resolve: Boolean): Class<*> {
|
||||||
return if (name.startsWith(allowedPackage)) {
|
return if (name.startsWith(allowedPackage)) {
|
||||||
parent.loadClass(name)
|
parent.loadClass(name)
|
||||||
|
|||||||
Reference in New Issue
Block a user