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
This commit is contained in:
James Dong
2012-03-02 16:49:35 -08:00
parent 1c32c8a170
commit f16a2724e0

View File

@@ -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");