OSDN Git Service

On some "non-standard" devices, load label can cause a security exception
authorSunny Goyal <sunnygoyal@google.com>
Mon, 16 May 2016 18:57:45 +0000 (11:57 -0700)
committerSunny Goyal <sunnygoyal@google.com>
Mon, 16 May 2016 19:43:18 +0000 (19:43 +0000)
due to modified platform code

Bug: 28243147
Change-Id: Iab899d0cb233e19ebf994f8a3eacba26f840148f

src/com/android/launcher3/compat/LauncherActivityInfoCompatV16.java
src/com/android/launcher3/model/WidgetsAndShortcutNameComparator.java

index fee0376..15c5e69 100644 (file)
@@ -26,6 +26,7 @@ import android.content.pm.PackageInfo;
 import android.content.pm.ResolveInfo;
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
+import android.util.Log;
 
 
 public class LauncherActivityInfoCompatV16 extends LauncherActivityInfoCompat {
@@ -51,7 +52,12 @@ public class LauncherActivityInfoCompatV16 extends LauncherActivityInfoCompat {
     }
 
     public CharSequence getLabel() {
-        return mResolveInfo.loadLabel(mPm);
+        try {
+            return mResolveInfo.loadLabel(mPm);
+        } catch (SecurityException e) {
+            Log.e("LAInfoCompat", "Failed to extract app display name from resolve info", e);
+            return "";
+        }
     }
 
     public Drawable getIcon(int density) {
index b990560..2e4167e 100644 (file)
@@ -4,6 +4,8 @@ import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.util.Log;
+
 import com.android.launcher3.LauncherAppWidgetProviderInfo;
 import com.android.launcher3.Utilities;
 import com.android.launcher3.compat.AppWidgetManagerCompat;
@@ -91,7 +93,13 @@ public class WidgetsAndShortcutNameComparator implements Comparator<Object> {
             return Utilities.trim(mManager.loadLabel(widgetInfo));
         } else {
             ResolveInfo shortcutInfo = (ResolveInfo) o;
-            return Utilities.trim(shortcutInfo.loadLabel(mPackageManager));
+            try {
+                return Utilities.trim(shortcutInfo.loadLabel(mPackageManager));
+            } catch (Exception e) {
+                Log.e("ShortcutNameComparator",
+                        "Failed to extract app display name from resolve info", e);
+                return "";
+            }
         }
     }
 };