From 427864188dfc5dd803b15797379b9dc6673abd16 Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Thu, 26 Sep 2013 16:14:36 -0700 Subject: Don't instantiate non-Fragments in Fragment.instantiate Backport... Fix for PreferenceActivities being invoked with non-Fragment class names via extras in the intent. Make sure that the constructor doesn't get called if the class name is not for a Fragment type. Bug: 9901133 Change-Id: I227756fb4246deac796cee09077e482237bb5b0d --- core/java/android/app/Fragment.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java index 28876d3..32ee601 100644 --- a/core/java/android/app/Fragment.java +++ b/core/java/android/app/Fragment.java @@ -572,6 +572,10 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene if (clazz == null) { // Class not found in the cache, see if it's real, and try to add it clazz = context.getClassLoader().loadClass(fname); + if (!Fragment.class.isAssignableFrom(clazz)) { + throw new InstantiationException("Trying to instantiate a class " + fname + + " that is not a Fragment", new ClassCastException()); + } sClassMap.put(fname, clazz); } Fragment f = (Fragment)clazz.newInstance(); -- cgit v1.1