From bd5f011c0e94345b2acac57185a5957aef6d72b8 Mon Sep 17 00:00:00 2001
From: SpiritCroc <dev@spiritcroc.de>
Date: Sat, 13 Aug 2022 11:06:57 +0200
Subject: [PATCH] Fix crash on incoming share throwing SecurityException

Tested with org.mozilla.fennec_fdroid Version 103.1.0 (1031020) when
sharing to quick contacts.

Change-Id: Ie66e5945aa85fe309b1cfc42d7bad61675a1b4b8
---
 .../features/share/IncomingShareFragment.kt   | 30 ++++++++++++-------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt b/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt
index 3e2ddc469c..b64e7c27b0 100644
--- a/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt
@@ -40,6 +40,7 @@ import im.vector.app.features.attachments.ShareIntentHandler
 import im.vector.app.features.attachments.preview.AttachmentsPreviewActivity
 import im.vector.app.features.attachments.preview.AttachmentsPreviewArgs
 import org.matrix.android.sdk.api.session.room.model.RoomSummary
+import timber.log.Timber
 import javax.inject.Inject
 
 /**
@@ -106,17 +107,24 @@ class IncomingShareFragment @Inject constructor(
         }
     }
 
-    private fun handleIncomingShareIntent(intent: Intent) = shareIntentHandler.handleIncomingShareIntent(
-            intent,
-            onFile = {
-                val sharedData = SharedData.Attachments(it)
-                viewModel.handle(IncomingShareAction.UpdateSharedData(sharedData))
-            },
-            onPlainText = {
-                val sharedData = SharedData.Text(it)
-                viewModel.handle(IncomingShareAction.UpdateSharedData(sharedData))
-            }
-    )
+    private fun handleIncomingShareIntent(intent: Intent): Boolean {
+        return try {
+            shareIntentHandler.handleIncomingShareIntent(
+                    intent,
+                    onFile = {
+                        val sharedData = SharedData.Attachments(it)
+                        viewModel.handle(IncomingShareAction.UpdateSharedData(sharedData))
+                    },
+                    onPlainText = {
+                        val sharedData = SharedData.Text(it)
+                        viewModel.handle(IncomingShareAction.UpdateSharedData(sharedData))
+                    }
+            )
+        } catch (e: SecurityException) {
+            Timber.e(e, "Security exception handling incoming share")
+            false
+        }
+    }
 
     private fun handleMultipleRoomsShareDone(viewEvent: IncomingShareViewEvents.MultipleRoomsShareDone) {
         requireActivity().let {