From 384272ba3e3e60f04e06c2f32254ded361d065be Mon Sep 17 00:00:00 2001 From: Andrey Yepin Date: Wed, 14 May 2025 15:52:05 -0700 Subject: [SP 2025-09-01] Sanitize cross-profile intents. Remove package or component information from payload intents (and their selectors) for cross-profile sharing. Bug: 407764858 Test: manual testing Test: atest IntentResolver-test-unit Test: ag/32976049 (checked out and ran locally) Flag: EXEMPT bugfix Change-Id: I1ebfd96b2aabba6665267722603c72cbe4aefe0f (cherry picked from commit d605b5448615815cb6a7630637b9c55349ffe36e) --- .../android/intentresolver/util/IntentUtilsTest.kt | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 tests/unit/src/com/android/intentresolver/util/IntentUtilsTest.kt (limited to 'tests') diff --git a/tests/unit/src/com/android/intentresolver/util/IntentUtilsTest.kt b/tests/unit/src/com/android/intentresolver/util/IntentUtilsTest.kt new file mode 100644 index 00000000..8042b82e --- /dev/null +++ b/tests/unit/src/com/android/intentresolver/util/IntentUtilsTest.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.intentresolver.util + +import android.content.ComponentName +import android.content.Intent +import android.content.Intent.ACTION_SEND +import com.google.common.truth.Truth.assertThat +import org.junit.Test + +class IntentUtilsTest { + @Test + fun test_sanitizePayloadIntents() { + val intents = + listOf( + Intent(ACTION_SEND).apply { setPackage("org.test.example") }, + Intent(ACTION_SEND).apply { + setComponent( + ComponentName.unflattenFromString("org.test.example/.TestActivity") + ) + }, + Intent(ACTION_SEND).apply { + setSelector(Intent(ACTION_SEND).apply { setPackage("org.test.example") }) + }, + Intent(ACTION_SEND).apply { + setSelector( + Intent(ACTION_SEND).apply { + setComponent( + ComponentName.unflattenFromString("org.test.example/.TestActivity") + ) + } + ) + }, + ) + + val sanitized = sanitizePayloadIntents(intents) + + assertThat(sanitized).hasSize(intents.size) + for (i in sanitized) { + assertThat(i.getPackage()).isNull() + assertThat(i.getComponent()).isNull() + i.getSelector()?.let { + assertThat(it.getPackage()).isNull() + assertThat(it.getComponent()).isNull() + } + } + } +} -- cgit v1.2.3-59-g8ed1b