From 5bec0266358f28a91b38f8aefbcb918219aa4ce9 Mon Sep 17 00:00:00 2001 From: Jeff Tinker Date: Mon, 10 Nov 2014 17:47:49 -0800 Subject: [PATCH] Fix Crash when sending null in HashMap to getKeyRequest Merge of partner https://android-review.googlesource.com/#/c/115665 Change-Id: I50235dc09be584165155019a70708377ca9688a0 --- media/jni/android_media_MediaDrm.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/media/jni/android_media_MediaDrm.cpp b/media/jni/android_media_MediaDrm.cpp index d9de7a9435f4a..2f3c7c94dea91 100644 --- a/media/jni/android_media_MediaDrm.cpp +++ b/media/jni/android_media_MediaDrm.cpp @@ -438,7 +438,7 @@ static String8 JStringToString8(JNIEnv *env, jstring const &jstr) { Entry e = s.next(); */ -static KeyedVector HashMapToKeyedVector(JNIEnv *env, jobject &hashMap) { +static KeyedVector HashMapToKeyedVector(JNIEnv *env, jobject &hashMap, bool *pIsOK) { jclass clazz = gFields.stringClassId; KeyedVector keyedVector; @@ -451,16 +451,22 @@ static KeyedVector 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(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(obj); @@ -763,7 +769,11 @@ static jobject android_media_MediaDrm_getKeyRequest( KeyedVector optParams; if (joptParams != NULL) { - optParams = HashMapToKeyedVector(env, joptParams); + bool isOK = true; + optParams = HashMapToKeyedVector(env, joptParams, &isOK); + if (!isOK) { + return NULL; + } } Vector request;