From d7c31fbe826bac828ed42e2e658e01141f9a6716 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Thu, 18 Nov 2021 11:58:12 +0300 Subject: [PATCH] Disregard PlatformImplementation class loaded from parent classloader Such type cannot be cast to a base type, if the former is loaded from a different, parent classloader. #KT-47857 Fixed Co-authored-by: Aleksei.Cherepanov --- .../jvm/src/kotlin/internal/PlatformImplementations.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/stdlib/jvm/src/kotlin/internal/PlatformImplementations.kt b/libraries/stdlib/jvm/src/kotlin/internal/PlatformImplementations.kt index b819dbd52e1..09c6518050c 100644 --- a/libraries/stdlib/jvm/src/kotlin/internal/PlatformImplementations.kt +++ b/libraries/stdlib/jvm/src/kotlin/internal/PlatformImplementations.kt @@ -77,7 +77,10 @@ private inline fun castToBaseType(instance: Any): T { } catch (e: ClassCastException) { val instanceCL = instance.javaClass.classLoader val baseTypeCL = T::class.java.classLoader - throw ClassCastException("Instance classloader: $instanceCL, base type classloader: $baseTypeCL").initCause(e) + if (instanceCL != baseTypeCL) { + throw ClassNotFoundException("Instance class was loaded from a different classloader: $instanceCL, base type classloader: $baseTypeCL", e) + } + throw e } }