diff options
author | Jeff Hao <jeffhao@google.com> | 2014-04-01 21:51:49 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-04-01 21:51:49 +0000 |
commit | d9d0d1c593a34c6169e7f0a5b42aa8ae6af3daca (patch) | |
tree | e1c2b8b3e8f8afc7ce5ee5a1d33502a9129b20ce /libart | |
parent | 1a6b8f95187f791de9265aaa6d761e9181ab0e34 (diff) | |
parent | 96e2e4faf806aa22ca205354c16b04288d51ddbf (diff) | |
download | libcore-d9d0d1c593a34c6169e7f0a5b42aa8ae6af3daca.tar.gz libcore-d9d0d1c593a34c6169e7f0a5b42aa8ae6af3daca.tar.bz2 libcore-d9d0d1c593a34c6169e7f0a5b42aa8ae6af3daca.zip |
Merge "Fix reflection access checks for app compatibility in libcore."
Diffstat (limited to 'libart')
-rw-r--r-- | libart/src/main/java/java/lang/Class.java | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/libart/src/main/java/java/lang/Class.java b/libart/src/main/java/java/lang/Class.java index 36a55f5a3..ea41d6e01 100644 --- a/libart/src/main/java/java/lang/Class.java +++ b/libart/src/main/java/java/lang/Class.java @@ -1551,6 +1551,10 @@ public final class Class<T> implements Serializable, AnnotatedElement, GenericDe if (isPrimitive() || isInterface() || isArray() || Modifier.isAbstract(accessFlags)) { throw new InstantiationException(this + " cannot be instantiated"); } + Class<?> caller = VMStack.getStackClass1(); + if (!caller.canAccess(this)) { + throw new IllegalAccessException(this + " is not accessible from " + caller); + } Constructor<T> init; try { init = getDeclaredConstructor(); @@ -1560,6 +1564,9 @@ public final class Class<T> implements Serializable, AnnotatedElement, GenericDe t.initCause(e); throw t; } + if (!caller.canAccessMember(this, init.getAccessFlags())) { + throw new IllegalAccessException(init + " is not accessible from " + caller); + } try { return init.newInstance(null, init.isAccessible()); } catch (InvocationTargetException e) { |