From a2a0b11c98fc41bba012b7a96813cf11276528f2 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 5 Jun 2026 19:43:58 +0000 Subject: [PATCH] Improve validation on launcher alias intents. --- .../org/thoughtcrime/securesms/MainActivity.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt index 33bc4b2b1c..3fe826f071 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/MainActivity.kt @@ -1052,6 +1052,13 @@ class MainActivity : private fun handleConversationIntent(intent: Intent) { if (ConversationIntents.isConversationIntent(intent)) { + if (!isTrustedConversationIntent(intent)) { + Log.w(TAG, "Received a conversation intent through an exported entry point. Ignoring its extras.") + intent.action = null + setIntent(intent) + return + } + mainNavigationViewModel.goTo(MainNavigationListLocation.CHATS) mainNavigationViewModel.goTo(MainNavigationDetailLocation.Conversation(ConversationIntents.readArgsFromBundle(intent.extras!!))) intent.action = null @@ -1059,6 +1066,14 @@ class MainActivity : } } + /** + * While MainActivity isn't exporting, we have launcher aliases that are, so we verify that someone isn't launching us through those befre + * respecting various intent attributes. + */ + private fun isTrustedConversationIntent(intent: Intent): Boolean { + return intent.component?.className == MainActivity::class.java.name + } + private fun handleGroupLinkInIntent(intent: Intent) { intent.data?.let { data -> CommunicationActions.handlePotentialGroupLinkUrl(this, data.toString())