diff options
| author | 2025-01-31 03:50:08 -0800 | |
|---|---|---|
| committer | 2025-01-31 03:50:08 -0800 | |
| commit | eb3d11af5e997295fd38650b8a760bfb5fc5dc7e (patch) | |
| tree | 38ece1ca569c745afbe8606349c6c3246f5cca28 | |
| parent | 0cbca6b5df596eae861796909fd4c34693fcd202 (diff) | |
| parent | 1439f3d77629d6d8554fac9d65bb3260d90574ed (diff) | |
Merge "Check underlying intent as well as intent selector" into tm-dev am: 1439f3d776
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/31508276
Change-Id: Ia844b106430de2c24a09035ff8fd3202648d7ff9
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | core/java/com/android/internal/app/IntentForwarderActivity.java | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/core/java/com/android/internal/app/IntentForwarderActivity.java b/core/java/com/android/internal/app/IntentForwarderActivity.java index 070d8ff945ba..1ecd47e2b81b 100644 --- a/core/java/com/android/internal/app/IntentForwarderActivity.java +++ b/core/java/com/android/internal/app/IntentForwarderActivity.java @@ -319,24 +319,35 @@ public class IntentForwarderActivity extends Activity { Intent.FLAG_ACTIVITY_FORWARD_RESULT | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); sanitizeIntent(forwardIntent); - Intent intentToCheck = forwardIntent; - if (Intent.ACTION_CHOOSER.equals(forwardIntent.getAction())) { + if (!canForwardInner(forwardIntent, sourceUserId, targetUserId, packageManager, + contentResolver)) { return null; } if (forwardIntent.getSelector() != null) { - intentToCheck = forwardIntent.getSelector(); + sanitizeIntent(forwardIntent.getSelector()); + if (!canForwardInner(forwardIntent.getSelector(), sourceUserId, targetUserId, + packageManager, contentResolver)) { + return null; + } + } + return forwardIntent; + } + + private static boolean canForwardInner(Intent intent, int sourceUserId, int targetUserId, + IPackageManager packageManager, ContentResolver contentResolver) { + if (Intent.ACTION_CHOOSER.equals(intent.getAction())) { + return false; } - String resolvedType = intentToCheck.resolveTypeIfNeeded(contentResolver); - sanitizeIntent(intentToCheck); + String resolvedType = intent.resolveTypeIfNeeded(contentResolver); try { if (packageManager.canForwardTo( - intentToCheck, resolvedType, sourceUserId, targetUserId)) { - return forwardIntent; + intent, resolvedType, sourceUserId, targetUserId)) { + return true; } } catch (RemoteException e) { Slog.e(TAG, "PackageManagerService is dead?"); } - return null; + return false; } /** |