From 5a6a2394139cb8f41dbd0a33a724d8aa87a521c0 Mon Sep 17 00:00:00 2001 From: qnga <32197639+qnga@users.noreply.github.com> Date: Tue, 30 Apr 2024 13:53:17 +0200 Subject: [PATCH] Make possible crashes of PSPDFKit more explicit (#495) --- .../pspdfkit/document/PsPdfKitDocument.kt | 22 ++++++++-- .../pspdfkit/document/ResourceDataProvider.kt | 41 +++++++++++-------- 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/readium/adapters/pspdfkit/document/src/main/java/org/readium/adapter/pspdfkit/document/PsPdfKitDocument.kt b/readium/adapters/pspdfkit/document/src/main/java/org/readium/adapter/pspdfkit/document/PsPdfKitDocument.kt index dadcc476f6..52a8d74e91 100644 --- a/readium/adapters/pspdfkit/document/src/main/java/org/readium/adapter/pspdfkit/document/PsPdfKitDocument.kt +++ b/readium/adapters/pspdfkit/document/src/main/java/org/readium/adapter/pspdfkit/document/PsPdfKitDocument.kt @@ -47,12 +47,26 @@ public class PsPdfKitDocumentFactory(context: Context) : PdfDocumentFactory) + ?: return null + + return throwableCause.throwable as? IllegalStateException + } } public class PsPdfKitDocument( diff --git a/readium/adapters/pspdfkit/document/src/main/java/org/readium/adapter/pspdfkit/document/ResourceDataProvider.kt b/readium/adapters/pspdfkit/document/src/main/java/org/readium/adapter/pspdfkit/document/ResourceDataProvider.kt index 65e881f429..bd05e4d714 100644 --- a/readium/adapters/pspdfkit/document/src/main/java/org/readium/adapter/pspdfkit/document/ResourceDataProvider.kt +++ b/readium/adapters/pspdfkit/document/src/main/java/org/readium/adapter/pspdfkit/document/ResourceDataProvider.kt @@ -9,9 +9,9 @@ package org.readium.adapter.pspdfkit.document import com.pspdfkit.document.providers.DataProvider import java.util.UUID import kotlinx.coroutines.runBlocking +import org.readium.r2.shared.util.ThrowableError import org.readium.r2.shared.util.data.ReadError import org.readium.r2.shared.util.getOrElse -import org.readium.r2.shared.util.isLazyInitialized import org.readium.r2.shared.util.resource.Resource import org.readium.r2.shared.util.resource.synchronized import org.readium.r2.shared.util.toDebugDescription @@ -30,12 +30,17 @@ internal class ResourceDataProvider( private val length by lazy { runBlocking { - resource.length() - .getOrElse { - error = it - onResourceError(it) - DataProvider.FILE_SIZE_UNKNOWN.toLong() - } + try { + resource.length() + .getOrElse { + error = it + onResourceError(it) + DataProvider.FILE_SIZE_UNKNOWN.toLong() + } + } catch (e: Exception) { + error = ReadError.UnsupportedOperation(ThrowableError(IllegalStateException(e))) + DataProvider.FILE_SIZE_UNKNOWN.toLong() + } } } @@ -52,18 +57,20 @@ internal class ResourceDataProvider( override fun read(size: Long, offset: Long): ByteArray = runBlocking { val range = offset until (offset + size) - resource.read(range) - .getOrElse { - error = it - onResourceError(it) - DataProvider.NO_DATA_AVAILABLE - } + try { + resource.read(range) + .getOrElse { + error = it + onResourceError(it) + DataProvider.NO_DATA_AVAILABLE + } + } catch (e: Exception) { + error = ReadError.UnsupportedOperation(ThrowableError(IllegalStateException(e))) + DataProvider.NO_DATA_AVAILABLE + } } override fun release() { - if (::resource.isLazyInitialized) { - error = null - runBlocking { resource.close() } - } + runBlocking { resource.close() } } }