From f04ebbd59db63306e6680d1d7b8ec4f89eabca9f Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 10 Apr 2026 16:14:49 -0300 Subject: [PATCH] Don't crash when sending a PendingIntent isn't possible We had a report with a android.app.PendingIntent$CanceledException, but it is unclear under what circumstances the intent can be canceled. --- .../org/fdroid/install/SessionInstallManager.kt | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/org/fdroid/install/SessionInstallManager.kt b/app/src/main/kotlin/org/fdroid/install/SessionInstallManager.kt index dfe3856ba..ea9b9edca 100644 --- a/app/src/main/kotlin/org/fdroid/install/SessionInstallManager.kt +++ b/app/src/main/kotlin/org/fdroid/install/SessionInstallManager.kt @@ -143,7 +143,14 @@ constructor( // so fire up intent here and now. if (canRequestUserConfirmationNow) { log.info { "Sending pre-approval intent for ${app.packageName}: $intent" } - pendingIntent.send() + try { + pendingIntent.send() + } catch (e: Exception) { + log.error(e) { "Error sending pre-approval intent: " } + val s = PreApprovalResult.UserConfirmationRequired(sessionId, pendingIntent) + cont.resume(s) + context.unregisterReceiver(this) + } } else { log.info { "Can not ask pre-approval for ${app.packageName}: $intent" } val s = PreApprovalResult.UserConfirmationRequired(sessionId, pendingIntent) @@ -340,7 +347,13 @@ constructor( } registerReceiver(context, receiver, IntentFilter(ACTION_INSTALL), RECEIVER_NOT_EXPORTED) cont.invokeOnCancellation { context.unregisterReceiver(receiver) } - state.intent.send() + try { + state.intent.send() + } catch (e: Exception) { + log.error(e) { "Error sending user confirmation intent: " } + context.unregisterReceiver(receiver) + cont.resume(InstallState.Error("${e::class.java.simpleName} ${e.message}", state)) + } } private fun getSessionParams(packageName: String, size: Long? = null): SessionParams {