Skip to content

Commit bbf248e

Browse files
authored
Fix memory leak caused by invalid KTypeWrapper's equals method (#2274)
* Fix KTypeWrapper equality bug to avoid memory leak * Optimize imports of CachingTest.kt
1 parent 15aacd2 commit bbf248e

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

core/jvmMain/src/kotlinx/serialization/internal/Caching.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ private class KTypeWrapper(private val origin: KType) : KType {
170170

171171
override fun equals(other: Any?): Boolean {
172172
if (other == null) return false
173-
if (origin != other) return false
173+
if (origin != (other as? KTypeWrapper)?.origin) return false
174174

175175
val kClassifier = classifier
176176
if (kClassifier is KClass<*>) {
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
package kotlinx.serialization
6+
7+
import kotlinx.serialization.internal.*
8+
import kotlinx.serialization.modules.*
9+
import org.junit.Test
10+
import kotlin.reflect.*
11+
import kotlin.test.*
12+
13+
class CachingTest {
14+
@Test
15+
fun testCache() {
16+
var factoryCalled = 0
17+
18+
val cache = createCache {
19+
factoryCalled += 1
20+
it.serializerOrNull()
21+
}
22+
23+
repeat(10) {
24+
cache.get(typeOf<String>().kclass())
25+
}
26+
27+
assertEquals(1, factoryCalled)
28+
}
29+
30+
@Test
31+
fun testParameterizedCache() {
32+
var factoryCalled = 0
33+
34+
val cache = createParametrizedCache { clazz, types ->
35+
factoryCalled += 1
36+
val serializers = EmptySerializersModule().serializersForParameters(types, true)!!
37+
clazz.parametrizedSerializerOrNull(types, serializers)
38+
}
39+
40+
repeat(10) {
41+
cache.get(typeOf<Map<*, *>>().kclass(), listOf(typeOf<String>(), typeOf<String>()))
42+
}
43+
44+
assertEquals(1, factoryCalled)
45+
}
46+
}

0 commit comments

Comments
 (0)