diff options
| -rw-r--r-- | core/jni/android_os_HwParcel.cpp | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/core/jni/android_os_HwParcel.cpp b/core/jni/android_os_HwParcel.cpp index 7387b294bbcd..886c0e6771f4 100644 --- a/core/jni/android_os_HwParcel.cpp +++ b/core/jni/android_os_HwParcel.cpp @@ -267,17 +267,17 @@ static void JHwParcel_native_writeInterfaceToken( const jchar *interfaceName = env->GetStringCritical(interfaceNameObj, NULL); if (interfaceName) { - hardware::Parcel *parcel = - JHwParcel::GetNativeContext(env, thiz)->getParcel(); - - status_t err = parcel->writeInterfaceToken( - String16( - reinterpret_cast<const char16_t *>(interfaceName), - env->GetStringLength(interfaceNameObj))); + String16 nameCopy( + reinterpret_cast<const char16_t *>(interfaceName), + env->GetStringLength(interfaceNameObj)); env->ReleaseStringCritical(interfaceNameObj, interfaceName); interfaceName = NULL; + hardware::Parcel *parcel = + JHwParcel::GetNativeContext(env, thiz)->getParcel(); + + status_t err = parcel->writeInterfaceToken(nameCopy); signalExceptionForError(env, err); } } @@ -294,17 +294,18 @@ static void JHwParcel_native_enforceInterface( const jchar *interfaceName = env->GetStringCritical(interfaceNameObj, NULL); if (interfaceName) { - hardware::Parcel *parcel = - JHwParcel::GetNativeContext(env, thiz)->getParcel(); - - bool valid = parcel->enforceInterface( - String16( - reinterpret_cast<const char16_t *>(interfaceName), - env->GetStringLength(interfaceNameObj))); + String16 interfaceNameCopy( + reinterpret_cast<const char16_t *>(interfaceName), + env->GetStringLength(interfaceNameObj)); env->ReleaseStringCritical(interfaceNameObj, interfaceName); interfaceName = NULL; + hardware::Parcel *parcel = + JHwParcel::GetNativeContext(env, thiz)->getParcel(); + + bool valid = parcel->enforceInterface(interfaceNameCopy); + if (!valid) { jniThrowException( env, |