Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2670d5ad authored by Jeff Tinker's avatar Jeff Tinker Committed by Android (Google) Code Review
Browse files

Merge "Fix Crash when sending null in HashMap to getKeyRequest"

parents 670ec764 5bec0266
Loading
Loading
Loading
Loading
+14 −4
Original line number Original line Diff line number Diff line
@@ -438,7 +438,7 @@ static String8 JStringToString8(JNIEnv *env, jstring const &jstr) {
    Entry e = s.next();
    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;
    jclass clazz = gFields.stringClassId;
    KeyedVector<String8, String8> keyedVector;
    KeyedVector<String8, String8> keyedVector;


@@ -451,16 +451,22 @@ static KeyedVector<String8, String8> HashMapToKeyedVector(JNIEnv *env, jobject &
                jobject entry = env->CallObjectMethod(iterator, gFields.iterator.next);
                jobject entry = env->CallObjectMethod(iterator, gFields.iterator.next);
                if (entry) {
                if (entry) {
                    jobject obj = env->CallObjectMethod(entry, gFields.entry.getKey);
                    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",
                        jniThrowException(env, "java/lang/IllegalArgumentException",
                                          "HashMap key is not a String");
                                          "HashMap key is not a String");
                        env->DeleteLocalRef(entry);
                        *pIsOK = false;
                        break;
                    }
                    }
                    jstring jkey = static_cast<jstring>(obj);
                    jstring jkey = static_cast<jstring>(obj);


                    obj = env->CallObjectMethod(entry, gFields.entry.getValue);
                    obj = env->CallObjectMethod(entry, gFields.entry.getValue);
                    if (!env->IsInstanceOf(obj, clazz)) {
                    if (obj == NULL || !env->IsInstanceOf(obj, clazz)) {
                        jniThrowException(env, "java/lang/IllegalArgumentException",
                        jniThrowException(env, "java/lang/IllegalArgumentException",
                                          "HashMap value is not a String");
                                          "HashMap value is not a String");
                        env->DeleteLocalRef(entry);
                        *pIsOK = false;
                        break;
                    }
                    }
                    jstring jvalue = static_cast<jstring>(obj);
                    jstring jvalue = static_cast<jstring>(obj);


@@ -763,7 +769,11 @@ static jobject android_media_MediaDrm_getKeyRequest(


    KeyedVector<String8, String8> optParams;
    KeyedVector<String8, String8> optParams;
    if (joptParams != NULL) {
    if (joptParams != NULL) {
        optParams = HashMapToKeyedVector(env, joptParams);
        bool isOK = true;
        optParams = HashMapToKeyedVector(env, joptParams, &isOK);
        if (!isOK) {
            return NULL;
        }
    }
    }


    Vector<uint8_t> request;
    Vector<uint8_t> request;