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

Commit f16a2724 authored by James Dong's avatar James Dong
Browse files

Fix some JNI issues in the drm framework

o allocated array using new must be deleted using delete[]
o removed duplicated code

Change-Id: Ifa8e2e1cd46568c5266717eb1ad340b61a843adc
parent 1c32c8a1
Loading
Loading
Loading
Loading
+9 −30
Original line number Diff line number Diff line
@@ -57,29 +57,16 @@ public:
};

String8 Utility::getStringValue(JNIEnv* env, jobject object, const char* fieldName) {
    String8 dataString("");

    /* Look for the instance field with the name fieldName */
    jfieldID fieldID
        = env->GetFieldID(env->GetObjectClass(object), fieldName , "Ljava/lang/String;");

    if (NULL != fieldID) {
        jstring valueString = (jstring) env->GetObjectField(object, fieldID);

        if (NULL != valueString && valueString != env->NewStringUTF("")) {
            char* bytes = const_cast< char* > (env->GetStringUTFChars(valueString, NULL));

            const int length = strlen(bytes) + 1;
            char *data = new char[length];
            strncpy(data, bytes, length);
            dataString = String8(data);

            env->ReleaseStringUTFChars(valueString, bytes);
            delete [] data; data = NULL;
        } else {
            ALOGV("Failed to retrieve the data from the field %s", fieldName);
        }
        return Utility::getStringValue(env, valueString);
    }

    String8 dataString("");
    return dataString;
}

@@ -102,24 +89,16 @@ String8 Utility::getStringValue(JNIEnv* env, jstring string) {

char* Utility::getByteArrayValue(
            JNIEnv* env, jobject object, const char* fieldName, int* dataLength) {
    char* data = NULL;

    *dataLength = 0;

    jfieldID fieldID = env->GetFieldID(env->GetObjectClass(object), fieldName , "[B");

    if (NULL != fieldID) {
        jbyteArray byteArray = (jbyteArray) env->GetObjectField(object, fieldID);
        if (NULL != byteArray) {
            jint length = env->GetArrayLength(byteArray);

            *dataLength = length;
            if (0 < *dataLength) {
                data = new char[length];
                env->GetByteArrayRegion(byteArray, (jint)0, length, (jbyte *) data);
        return Utility::getByteArrayValue(env, byteArray, dataLength);
    }
        }
    }
    return data;
    return NULL;
}

char* Utility::getByteArrayValue(JNIEnv* env, jbyteArray byteArray, int* dataLength) {
@@ -419,7 +398,7 @@ static jint android_drm_DrmManagerClient_saveRights(
                                Utility::getStringValue(env, contentPath));
    }

    delete mData; mData = NULL;
    delete[] mData; mData = NULL;
    ALOGV("saveRights - Exit");
    return result;
}
@@ -510,7 +489,7 @@ static jobject android_drm_DrmManagerClient_processDrmInfo(
                processedData, env->NewStringUTF(pDrmInfoStatus->mimeType.string()));
    }

    delete mData; mData = NULL;
    delete[] mData; mData = NULL;
    delete pDrmInfoStatus; pDrmInfoStatus = NULL;

    ALOGV("processDrmInfo - Exit");
@@ -675,7 +654,7 @@ static jobject android_drm_DrmManagerClient_convertData(
                             statusCode, dataArray, pDrmConvertedStatus->offset);
    }

    delete mData; mData = NULL;
    delete[] mData; mData = NULL;
    delete pDrmConvertedStatus; pDrmConvertedStatus = NULL;

    ALOGV("convertData - Exit");