diff options
| author | 2016-11-10 18:58:28 +0000 | |
|---|---|---|
| committer | 2016-11-10 18:58:29 +0000 | |
| commit | df3d68c9b2ae39dba1f875da9074726d7287c3ef (patch) | |
| tree | 8ed7cd3b900b47bbbdd53f442afbd5047f675118 | |
| parent | bccf93311cdf5e8cfcd00bdfbf4ccab44ba7b6ab (diff) | |
| parent | 9f0268695c046538a1887f54172454dbc89157e7 (diff) | |
Merge "Fix use of JNI calls inside GetStringCritical/ReleaseStringCritical sections."
| -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, |