diff --git a/core/jni/android_os_HwParcel.cpp b/core/jni/android_os_HwParcel.cpp index 151dbfce7af32..a88f8919ed086 100644 --- a/core/jni/android_os_HwParcel.cpp +++ b/core/jni/android_os_HwParcel.cpp @@ -292,19 +292,11 @@ static void JHwParcel_native_enforceInterface( return; } - const jchar *interfaceName = env->GetStringCritical(interfaceNameObj, NULL); + const char *interfaceName = env->GetStringUTFChars(interfaceNameObj, NULL); if (interfaceName) { - String8 interfaceNameCopy = String8(String16( - reinterpret_cast(interfaceName), - env->GetStringLength(interfaceNameObj))); - - env->ReleaseStringCritical(interfaceNameObj, interfaceName); - interfaceName = NULL; - hardware::Parcel *parcel = JHwParcel::GetNativeContext(env, thiz)->getParcel(); - - bool valid = parcel->enforceInterface(interfaceNameCopy.string()); + bool valid = parcel->enforceInterface(interfaceName); if (!valid) { jniThrowException( @@ -312,6 +304,7 @@ static void JHwParcel_native_enforceInterface( "java/lang/SecurityException", "HWBinder invocation to an incorrect interface"); } + env->ReleaseStringUTFChars(interfaceNameObj, interfaceName); } } diff --git a/core/jni/android_os_Parcel.cpp b/core/jni/android_os_Parcel.cpp index d80c071c3e26c..d723ecc13dd09 100644 --- a/core/jni/android_os_Parcel.cpp +++ b/core/jni/android_os_Parcel.cpp @@ -625,8 +625,8 @@ static void android_os_Parcel_enforceInterface(JNIEnv* env, jclass clazz, jlong IPCThreadState* threadState = IPCThreadState::self(); const int32_t oldPolicy = threadState->getStrictModePolicy(); const bool isValid = parcel->enforceInterface( - String16(reinterpret_cast(str), - env->GetStringLength(name)), + reinterpret_cast(str), + env->GetStringLength(name), threadState); env->ReleaseStringCritical(name, str); if (isValid) {