aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2017-02-21 19:32:55 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2017-02-21 19:32:55 +0000
commit89ebbfb9a9383239ea7a4824aabf966b896b66cf (patch)
treea96d296e2e10a30e8c904bcf97c8c68ffd9d1913
parent26c830a601a4be274c27401f2656b4faa0316b92 (diff)
parentce575973d003ce07fe7bba94378c96ed9b53c61a (diff)
downloadprotobuf-89ebbfb9a9383239ea7a4824aabf966b896b66cf.tar.gz
Merge "Don't execute code before checking a class is a messagenano."
-rw-r--r--java/src/device/main/java/com/google/protobuf/nano/android/ParcelableMessageNanoCreator.java12
1 files changed, 10 insertions, 2 deletions
diff --git a/java/src/device/main/java/com/google/protobuf/nano/android/ParcelableMessageNanoCreator.java b/java/src/device/main/java/com/google/protobuf/nano/android/ParcelableMessageNanoCreator.java
index 5a4b70c72..9c97439f9 100644
--- a/java/src/device/main/java/com/google/protobuf/nano/android/ParcelableMessageNanoCreator.java
+++ b/java/src/device/main/java/com/google/protobuf/nano/android/ParcelableMessageNanoCreator.java
@@ -38,6 +38,7 @@ import com.google.protobuf.nano.InvalidProtocolBufferNanoException;
import com.google.protobuf.nano.MessageNano;
import java.lang.reflect.Array;
+import java.lang.reflect.InvocationTargetException;
public final class ParcelableMessageNanoCreator<T extends MessageNano>
implements Parcelable.Creator<T> {
@@ -58,12 +59,19 @@ public final class ParcelableMessageNanoCreator<T extends MessageNano>
T proto = null;
try {
- Class<?> clazz = Class.forName(className);
- Object instance = clazz.newInstance();
+ // Check that the provided class is a subclass of MessageNano before executing any code
+ Class<?> clazz =
+ Class.forName(className, false /*initialize*/, this.getClass().getClassLoader())
+ .asSubclass(MessageNano.class);
+ Object instance = clazz.getConstructor().newInstance();
proto = (T) instance;
MessageNano.mergeFrom(proto, data);
} catch (ClassNotFoundException e) {
Log.e(TAG, "Exception trying to create proto from parcel", e);
+ } catch (NoSuchMethodException e) {
+ Log.e(TAG, "Exception trying to create proto from parcel", e);
+ } catch (InvocationTargetException e) {
+ Log.e(TAG, "Exception trying to create proto from parcel", e);
} catch (IllegalAccessException e) {
Log.e(TAG, "Exception trying to create proto from parcel", e);
} catch (InstantiationException e) {