diff options
author | Jeff Sharkey <jsharkey@android.com> | 2017-09-20 16:09:16 -0600 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-11-09 19:09:35 +0000 |
commit | 43c346847756584bb58247510cb1b3249985fc27 (patch) | |
tree | 86a97b77712f63c4bf719371bc6509e8c6b0c1e3 | |
parent | 1a85090a85c22ecabdeede559258e48b7abefa74 (diff) | |
download | base-43c346847756584bb58247510cb1b3249985fc27.tar.gz |
Only construct real Throwable objects.
Without this test, someone could trick us into constructing other
shady classes.
Test: builds, boots
Bug: 65281159
Change-Id: If678d0681708d1b0dcf056aa1133830ad3dbce31
(cherry picked from commit 8e151bf8999345399208d54663f103921ae5e1c6)
-rw-r--r-- | core/java/android/os/ParcelableException.java | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/core/java/android/os/ParcelableException.java b/core/java/android/os/ParcelableException.java index d84d62997d93..7f71905d7f28 100644 --- a/core/java/android/os/ParcelableException.java +++ b/core/java/android/os/ParcelableException.java @@ -52,10 +52,12 @@ public final class ParcelableException extends RuntimeException implements Parce final String msg = in.readString(); try { final Class<?> clazz = Class.forName(name, true, Parcelable.class.getClassLoader()); - return (Throwable) clazz.getConstructor(String.class).newInstance(msg); + if (Throwable.class.isAssignableFrom(clazz)) { + return (Throwable) clazz.getConstructor(String.class).newInstance(msg); + } } catch (ReflectiveOperationException e) { - throw new RuntimeException(name + ": " + msg); } + return new RuntimeException(name + ": " + msg); } /** {@hide} */ |