Skip to content

Commit 324ea95

Browse files
committed
Ensure Realm migration does not crash
Fixes #8962
1 parent 9dfc1f1 commit 324ea95

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/migration/MigrateCryptoTo024.kt

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.matrix.android.sdk.internal.crypto.store.db.migration
1818

1919
import io.realm.DynamicRealm
20+
import org.matrix.android.sdk.internal.extensions.safeRemove
2021
import org.matrix.android.sdk.internal.util.database.RealmMigrator
2122

2223
internal class MigrateCryptoTo024(realm: DynamicRealm) : RealmMigrator(realm, 24) {
@@ -32,20 +33,20 @@ internal class MigrateCryptoTo024(realm: DynamicRealm) : RealmMigrator(realm, 24
3233
get("CryptoRoomEntity")?.removeField("outboundSessionInfo")
3334

3435
// Warning: order is important, first remove classes that depends on others.
35-
remove("UserEntity")
36-
remove("DeviceInfoEntity")
37-
remove("CrossSigningInfoEntity")
38-
remove("KeyInfoEntity")
39-
remove("TrustLevelEntity")
40-
remove("KeysBackupDataEntity")
41-
remove("OlmInboundGroupSessionEntity")
42-
remove("OlmSessionEntity")
43-
remove("AuditTrailEntity")
44-
remove("OutgoingKeyRequestEntity")
45-
remove("KeyRequestReplyEntity")
46-
remove("WithHeldSessionEntity")
47-
remove("SharedSessionEntity")
48-
remove("OutboundGroupSessionInfoEntity")
36+
safeRemove("UserEntity")
37+
safeRemove("DeviceInfoEntity")
38+
safeRemove("CrossSigningInfoEntity")
39+
safeRemove("KeyInfoEntity")
40+
safeRemove("TrustLevelEntity")
41+
safeRemove("KeysBackupDataEntity")
42+
safeRemove("OlmInboundGroupSessionEntity")
43+
safeRemove("OlmSessionEntity")
44+
safeRemove("AuditTrailEntity")
45+
safeRemove("OutgoingKeyRequestEntity")
46+
safeRemove("KeyRequestReplyEntity")
47+
safeRemove("WithHeldSessionEntity")
48+
safeRemove("SharedSessionEntity")
49+
safeRemove("OutboundGroupSessionInfoEntity")
4950
}
5051
}
5152
}

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/RealmExtensions.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package org.matrix.android.sdk.internal.extensions
1919
import io.realm.RealmList
2020
import io.realm.RealmObject
2121
import io.realm.RealmObjectSchema
22+
import io.realm.RealmSchema
2223
import org.matrix.android.sdk.internal.database.model.HomeServerCapabilitiesEntityFields
2324
import org.matrix.android.sdk.internal.util.fatalError
2425

@@ -52,3 +53,9 @@ internal fun RealmObjectSchema?.forceRefreshOfHomeServerCapabilities(): RealmObj
5253
obj.setLong(HomeServerCapabilitiesEntityFields.LAST_UPDATED_TIMESTAMP, 0)
5354
}
5455
}
56+
57+
internal fun RealmSchema.safeRemove(className: String) {
58+
if (get(className) != null) {
59+
remove(className)
60+
}
61+
}

0 commit comments

Comments
 (0)