@@ -8,8 +8,8 @@ package kotlinx.datetime.test
8
8
import kotlinx.datetime.test.MaliciousJvmSerializationTest.TestCase.Streams
9
9
import java.io.ByteArrayInputStream
10
10
import java.io.ObjectInputStream
11
+ import java.io.ObjectStreamClass
11
12
import java.io.Serializable
12
- import java.lang.reflect.Modifier
13
13
import kotlin.reflect.KClass
14
14
import kotlin.test.Test
15
15
import kotlin.test.assertEquals
@@ -140,11 +140,9 @@ class MaliciousJvmSerializationTest {
140
140
141
141
private fun TestCase.ensureAssumptionsHold () {
142
142
val className = clazz.qualifiedName!!
143
+ val objectStreamClass = ObjectStreamClass .lookup(clazz.java)
143
144
144
- val actualSerialVersionUID = clazz.java
145
- .getDeclaredField(" serialVersionUID" )
146
- .apply { isAccessible = true }
147
- .get(null ) as Long
145
+ val actualSerialVersionUID = objectStreamClass.serialVersionUID
148
146
if (actualSerialVersionUID == 42L ) {
149
147
fail(" This test assumes that the tested classes don't have a serialVersionUID of 42 but $className does." )
150
148
}
@@ -155,11 +153,11 @@ class MaliciousJvmSerializationTest {
155
153
)
156
154
}
157
155
158
- val field = clazz.java.declaredFields. singleOrNull { ! Modifier .isStatic(it.modifiers) }
156
+ val field = objectStreamClass.fields. singleOrNull()
159
157
if (field == null || field.name != delegateFieldName || field.type != delegate.javaClass) {
160
158
fail(
161
- " This test assumes that $className has a single instance field named $delegateFieldName of type " +
162
- " ${delegate::class .qualifiedName} . The test case for $className should be updated with new " +
159
+ " This test assumes that $className has a single serializable field named ' $delegateFieldName ' of " +
160
+ " type ${delegate::class .qualifiedName} . The test case for $className should be updated with new " +
163
161
" malicious serial streams that represent the changes to $className ."
164
162
)
165
163
}
0 commit comments