summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/InstallShortcutReceiver.java
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2015-12-07 14:51:23 -0800
committerSunny Goyal <sunnygoyal@google.com>2015-12-07 14:52:07 -0800
commit7606a412c5a7da2d8eff9bd9425c759f7028d888 (patch)
treed00a43f20904d76b5e837e67b6659cb516144cea /src/com/android/launcher3/InstallShortcutReceiver.java
parent39b700fcc501a5c9b2fb83d4b754fb24d43d5c49 (diff)
downloadandroid_packages_apps_Trebuchet-7606a412c5a7da2d8eff9bd9425c759f7028d888.tar.gz
android_packages_apps_Trebuchet-7606a412c5a7da2d8eff9bd9425c759f7028d888.tar.bz2
android_packages_apps_Trebuchet-7606a412c5a7da2d8eff9bd9425c759f7028d888.zip
Verifying the install shortcut intent before casting the extras to various object types
Bug: 26043109 Change-Id: I95f127d62a6a508a850e11d6728afc7509fb07d1
Diffstat (limited to 'src/com/android/launcher3/InstallShortcutReceiver.java')
-rw-r--r--src/com/android/launcher3/InstallShortcutReceiver.java40
1 files changed, 28 insertions, 12 deletions
diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java
index 571d99a23..7f15160bf 100644
--- a/src/com/android/launcher3/InstallShortcutReceiver.java
+++ b/src/com/android/launcher3/InstallShortcutReceiver.java
@@ -144,29 +144,45 @@ public class InstallShortcutReceiver extends BroadcastReceiver {
if (!ACTION_INSTALL_SHORTCUT.equals(data.getAction())) {
return;
}
-
- PendingInstallShortcutInfo info = new PendingInstallShortcutInfo(data, context);
- if (info.launchIntent == null || info.label == null) {
- if (DBG) Log.e(TAG, "Invalid install shortcut intent");
- return;
+ PendingInstallShortcutInfo info = createPendingInfo(context, data);
+ if (info != null) {
+ queuePendingShortcutInfo(info, context);
}
+ }
- info = convertToLauncherActivityIfPossible(info);
- queuePendingShortcutInfo(info, context);
+ /**
+ * @return true is the extra is either null or is of type {@param type}
+ */
+ private static boolean isValidExtraType(Intent intent, String key, Class type) {
+ Object extra = intent.getParcelableExtra(key);
+ return extra == null || type.isInstance(extra);
}
- public static ShortcutInfo fromShortcutIntent(Context context, Intent data) {
+ /**
+ * Verifies the intent and creates a {@link PendingInstallShortcutInfo}
+ */
+ private static PendingInstallShortcutInfo createPendingInfo(Context context, Intent data) {
+ if (!isValidExtraType(data, Intent.EXTRA_SHORTCUT_INTENT, Intent.class) ||
+ !(isValidExtraType(data, Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
+ Intent.ShortcutIconResource.class)) ||
+ !(isValidExtraType(data, Intent.EXTRA_SHORTCUT_ICON, Bitmap.class))) {
+
+ if (DBG) Log.e(TAG, "Invalid install shortcut intent");
+ return null;
+ }
+
PendingInstallShortcutInfo info = new PendingInstallShortcutInfo(data, context);
if (info.launchIntent == null || info.label == null) {
if (DBG) Log.e(TAG, "Invalid install shortcut intent");
return null;
}
- info = convertToLauncherActivityIfPossible(info);
- return info.getShortcutInfo();
+
+ return convertToLauncherActivityIfPossible(info);
}
- static void queueInstallShortcut(LauncherActivityInfoCompat info, Context context) {
- queuePendingShortcutInfo(new PendingInstallShortcutInfo(info, context), context);
+ public static ShortcutInfo fromShortcutIntent(Context context, Intent data) {
+ PendingInstallShortcutInfo info = createPendingInfo(context, data);
+ return info == null ? null : info.getShortcutInfo();
}
private static void queuePendingShortcutInfo(PendingInstallShortcutInfo info, Context context) {