summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorJeff Tinker <jtinker@google.com>2015-03-13 18:20:41 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-03-13 18:20:43 +0000
commit62632e25f57989d5e5ac406e21f037a3e2f39b9c (patch)
tree637bd16da2678c71a95649cb0e527f61672e5d82 /media
parent30fcd2aa8a87ca97e1d6dbc3203c3a485a56dac9 (diff)
parent35d6a4f75bc3e02e5983fb800bc7538d51d01a45 (diff)
downloadframeworks_base-62632e25f57989d5e5ac406e21f037a3e2f39b9c.zip
frameworks_base-62632e25f57989d5e5ac406e21f037a3e2f39b9c.tar.gz
frameworks_base-62632e25f57989d5e5ac406e21f037a3e2f39b9c.tar.bz2
Merge "Handle NULL keys and NULL values in MediaDrm JNI HashMap"
Diffstat (limited to 'media')
-rw-r--r--media/jni/android_media_MediaDrm.cpp20
1 files changed, 16 insertions, 4 deletions
diff --git a/media/jni/android_media_MediaDrm.cpp b/media/jni/android_media_MediaDrm.cpp
index d9de7a9..5578416 100644
--- a/media/jni/android_media_MediaDrm.cpp
+++ b/media/jni/android_media_MediaDrm.cpp
@@ -438,9 +438,11 @@ static String8 JStringToString8(JNIEnv *env, jstring const &jstr) {
Entry e = s.next();
*/
-static KeyedVector<String8, String8> HashMapToKeyedVector(JNIEnv *env, jobject &hashMap) {
+static KeyedVector<String8, String8> HashMapToKeyedVector(
+ JNIEnv *env, jobject &hashMap, bool* pIsOK) {
jclass clazz = gFields.stringClassId;
KeyedVector<String8, String8> keyedVector;
+ *pIsOK = true;
jobject entrySet = env->CallObjectMethod(hashMap, gFields.hashmap.entrySet);
if (entrySet) {
@@ -451,16 +453,22 @@ static KeyedVector<String8, String8> HashMapToKeyedVector(JNIEnv *env, jobject &
jobject entry = env->CallObjectMethod(iterator, gFields.iterator.next);
if (entry) {
jobject obj = env->CallObjectMethod(entry, gFields.entry.getKey);
- if (!env->IsInstanceOf(obj, clazz)) {
+ if (obj == NULL || !env->IsInstanceOf(obj, clazz)) {
jniThrowException(env, "java/lang/IllegalArgumentException",
"HashMap key is not a String");
+ env->DeleteLocalRef(entry);
+ *pIsOK = false;
+ break;
}
jstring jkey = static_cast<jstring>(obj);
obj = env->CallObjectMethod(entry, gFields.entry.getValue);
- if (!env->IsInstanceOf(obj, clazz)) {
+ if (obj == NULL || !env->IsInstanceOf(obj, clazz)) {
jniThrowException(env, "java/lang/IllegalArgumentException",
"HashMap value is not a String");
+ env->DeleteLocalRef(entry);
+ *pIsOK = false;
+ break;
}
jstring jvalue = static_cast<jstring>(obj);
@@ -763,7 +771,11 @@ static jobject android_media_MediaDrm_getKeyRequest(
KeyedVector<String8, String8> optParams;
if (joptParams != NULL) {
- optParams = HashMapToKeyedVector(env, joptParams);
+ bool isOK;
+ optParams = HashMapToKeyedVector(env, joptParams, &isOK);
+ if (!isOK) {
+ return NULL;
+ }
}
Vector<uint8_t> request;