char16 strings returned by JNIEnv::GetStringCritical are not '\0' terminated.

Properly construct String16s from both pointer and length instead.

Bug: 31373735
Change-Id: Ia89df7840a48c4fce06e08fc3ae373e0fadfb44e
This commit is contained in:
Andreas Huber
2016-09-08 13:52:36 -07:00
parent 63a07e80d6
commit c84c5568a8

View File

@@ -213,7 +213,9 @@ static void JHwBinder_native_registerService(
sp<hardware::IBinder> binder = JHwBinder::GetNativeContext(env, thiz);
status_t err = hardware::defaultServiceManager()->addService(
String16(reinterpret_cast<const char16_t *>(serviceName)),
String16(
reinterpret_cast<const char16_t *>(serviceName),
env->GetStringLength(serviceNameObj)),
binder,
kVersion);
@@ -245,12 +247,15 @@ static jobject JHwBinder_native_getService(
LOG(INFO) << "looking for service '"
<< String8(String16(
reinterpret_cast<const char16_t *>(serviceName))).string()
reinterpret_cast<const char16_t *>(serviceName),
env->GetStringLength(serviceNameObj))).string()
<< "'";
sp<hardware::IBinder> service =
hardware::defaultServiceManager()->getService(
String16(reinterpret_cast<const char16_t *>(serviceName)),
String16(
reinterpret_cast<const char16_t *>(serviceName),
env->GetStringLength(serviceNameObj)),
kVersion);
env->ReleaseStringCritical(serviceNameObj, serviceName);