From 822705195ffc6532fb34ea60271f2fa6ef518e64 Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Wed, 15 May 2024 18:10:16 +0200 Subject: [PATCH] Fix crash when creating an `EncryptedFile` in Android 6 (#2853) --- changelog.d/2846.bugfix | 1 + .../sessionstorage/impl/di/SessionStorageModule.kt | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 changelog.d/2846.bugfix diff --git a/changelog.d/2846.bugfix b/changelog.d/2846.bugfix new file mode 100644 index 0000000000..2644b853f0 --- /dev/null +++ b/changelog.d/2846.bugfix @@ -0,0 +1 @@ +Fix a crash when trying to create an `EncryptedFile` in Android 6. diff --git a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageModule.kt b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageModule.kt index 052943388e..8d22dcfa61 100644 --- a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageModule.kt +++ b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageModule.kt @@ -35,6 +35,13 @@ object SessionStorageModule { fun provideMatrixDatabase(@ApplicationContext context: Context): SessionDatabase { val name = "session_database" val secretFile = context.getDatabasePath("$name.key") + + // Make sure the parent directory of the key file exists, otherwise it will crash in older Android versions + val parentDir = secretFile.parentFile + if (parentDir != null && !parentDir.exists()) { + parentDir.mkdirs() + } + val passphraseProvider = RandomSecretPassphraseProvider(context, secretFile) val driver = SqlCipherDriverFactory(passphraseProvider) .create(SessionDatabase.Schema, "$name.db", context)