diff options
| author | 2021-05-12 17:38:19 +0100 | |
|---|---|---|
| committer | 2021-05-13 15:08:18 +0100 | |
| commit | 6bc896f705f3936078f47d96a1a0338f78a2f9db (patch) | |
| tree | 10b0ee1e75efb553c75587f677e57d20d255762e | |
| parent | d261ad7bfe4ed784755cc27bb1cb7bceac2dc3c5 (diff) | |
Do not throw SecurityException from getPrimaryClip.
Currently getPrimaryClip throws a SecurityException if a Uri in
clipboard has become invalid and permission to it can no longer be
granted. This is unexpected and can crash apps that are trying to
paste.
This change catches the exception and clears clipboard if this case
occurs.
Bug: 187942504
Test: atest android.appsecurity.cts.AppSecurityTests#testPermissionDiffCert
Test: build & flash, create invalid Uri by uninstalling and reinstalling Chrome
Change-Id: I9994bb03f1aed47e32a500bba8886eea3f2cd905
| -rw-r--r-- | services/core/java/com/android/server/clipboard/ClipboardService.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java index ab67b138fdbf..093ecd57124f 100644 --- a/services/core/java/com/android/server/clipboard/ClipboardService.java +++ b/services/core/java/com/android/server/clipboard/ClipboardService.java @@ -379,7 +379,15 @@ public class ClipboardService extends SystemService { return null; } synchronized (mLock) { - addActiveOwnerLocked(intendingUid, pkg); + try { + addActiveOwnerLocked(intendingUid, pkg); + } catch (SecurityException e) { + // Permission could not be granted - URI may be invalid + Slog.i(TAG, "Could not grant permission to primary clip. Clearing clipboard."); + setPrimaryClipInternalLocked(null, intendingUid, pkg); + return null; + } + PerUserClipboard clipboard = getClipboardLocked(intendingUserId); showAccessNotificationLocked(pkg, intendingUid, intendingUserId, clipboard); notifyTextClassifierLocked(clipboard, pkg, intendingUid); |