summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <treehugger-gerrit@google.com> 2016-11-10 18:58:28 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2016-11-10 18:58:29 +0000
commitdf3d68c9b2ae39dba1f875da9074726d7287c3ef (patch)
tree8ed7cd3b900b47bbbdd53f442afbd5047f675118
parentbccf93311cdf5e8cfcd00bdfbf4ccab44ba7b6ab (diff)
parent9f0268695c046538a1887f54172454dbc89157e7 (diff)
Merge "Fix use of JNI calls inside GetStringCritical/ReleaseStringCritical sections."
-rw-r--r--core/jni/android_os_HwParcel.cpp29
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,