Merge changes I9ad74037,I50b29ef9

* changes:
  Avoid interface name copy in HwParcel
  Avoid allocation on Java Binder fast path
This commit is contained in:
Treehugger Robot
2020-02-26 14:46:57 +00:00
committed by Gerrit Code Review
2 changed files with 5 additions and 12 deletions

View File

@@ -292,19 +292,11 @@ static void JHwParcel_native_enforceInterface(
return; return;
} }
const jchar *interfaceName = env->GetStringCritical(interfaceNameObj, NULL); const char *interfaceName = env->GetStringUTFChars(interfaceNameObj, NULL);
if (interfaceName) { if (interfaceName) {
String8 interfaceNameCopy = String8(String16(
reinterpret_cast<const char16_t *>(interfaceName),
env->GetStringLength(interfaceNameObj)));
env->ReleaseStringCritical(interfaceNameObj, interfaceName);
interfaceName = NULL;
hardware::Parcel *parcel = hardware::Parcel *parcel =
JHwParcel::GetNativeContext(env, thiz)->getParcel(); JHwParcel::GetNativeContext(env, thiz)->getParcel();
bool valid = parcel->enforceInterface(interfaceName);
bool valid = parcel->enforceInterface(interfaceNameCopy.string());
if (!valid) { if (!valid) {
jniThrowException( jniThrowException(
@@ -312,6 +304,7 @@ static void JHwParcel_native_enforceInterface(
"java/lang/SecurityException", "java/lang/SecurityException",
"HWBinder invocation to an incorrect interface"); "HWBinder invocation to an incorrect interface");
} }
env->ReleaseStringUTFChars(interfaceNameObj, interfaceName);
} }
} }

View File

@@ -625,8 +625,8 @@ static void android_os_Parcel_enforceInterface(JNIEnv* env, jclass clazz, jlong
IPCThreadState* threadState = IPCThreadState::self(); IPCThreadState* threadState = IPCThreadState::self();
const int32_t oldPolicy = threadState->getStrictModePolicy(); const int32_t oldPolicy = threadState->getStrictModePolicy();
const bool isValid = parcel->enforceInterface( const bool isValid = parcel->enforceInterface(
String16(reinterpret_cast<const char16_t*>(str), reinterpret_cast<const char16_t*>(str),
env->GetStringLength(name)), env->GetStringLength(name),
threadState); threadState);
env->ReleaseStringCritical(name, str); env->ReleaseStringCritical(name, str);
if (isValid) { if (isValid) {