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
This commit is contained in:
@@ -572,6 +572,10 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene
|
|||||||
if (clazz == null) {
|
if (clazz == null) {
|
||||||
// Class not found in the cache, see if it's real, and try to add it
|
// Class not found in the cache, see if it's real, and try to add it
|
||||||
clazz = context.getClassLoader().loadClass(fname);
|
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);
|
sClassMap.put(fname, clazz);
|
||||||
}
|
}
|
||||||
Fragment f = (Fragment)clazz.newInstance();
|
Fragment f = (Fragment)clazz.newInstance();
|
||||||
|
|||||||
Reference in New Issue
Block a user