From 417b15994abe716efdc23f43ee536e8437461c0f Mon Sep 17 00:00:00 2001 From: Alison Cichowlas Date: Fri, 23 Jul 2021 12:17:29 -0400 Subject: [PATCH] Sharesheet: be more defensive about un-unparcelable intents. Test: atest ChooserActivityTest Bug: 194359789 Change-Id: I2fb0c0e120f048042dea499e1ffc126989e0e2d2 --- .../app/AbstractResolverComparator.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/core/java/com/android/internal/app/AbstractResolverComparator.java b/core/java/com/android/internal/app/AbstractResolverComparator.java index 40ada0b2ffdcc..c00d16ca143e6 100644 --- a/core/java/com/android/internal/app/AbstractResolverComparator.java +++ b/core/java/com/android/internal/app/AbstractResolverComparator.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.os.BadParcelableException; import android.os.Handler; import android.os.Looper; import android.os.Message; @@ -109,17 +110,22 @@ public abstract class AbstractResolverComparator implements Comparator annotations = intent.getStringArrayListExtra( - Intent.EXTRA_CONTENT_ANNOTATIONS); - if (annotations != null) { - int size = annotations.size(); - if (size > NUM_OF_TOP_ANNOTATIONS_TO_USE) { - size = NUM_OF_TOP_ANNOTATIONS_TO_USE; - } - mAnnotations = new String[size]; - for (int i = 0; i < size; i++) { - mAnnotations[i] = annotations.get(i); + try { + ArrayList annotations = intent.getStringArrayListExtra( + Intent.EXTRA_CONTENT_ANNOTATIONS); + if (annotations != null) { + int size = annotations.size(); + if (size > NUM_OF_TOP_ANNOTATIONS_TO_USE) { + size = NUM_OF_TOP_ANNOTATIONS_TO_USE; + } + mAnnotations = new String[size]; + for (int i = 0; i < size; i++) { + mAnnotations[i] = annotations.get(i); + } } + } catch (BadParcelableException e) { + Log.i(TAG, "Couldn't unparcel intent annotations. Ignoring."); + mAnnotations = new String[0]; } }