Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c84c5568 authored by Andreas Huber's avatar Andreas Huber
Browse files

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

Properly construct String16s from both pointer and length instead.

Bug: 31373735
Change-Id: Ia89df7840a48c4fce06e08fc3ae373e0fadfb44e
parent 63a07e80
Loading
Loading
Loading
Loading
+8 −3
Original line number Original line Diff line number Diff line
@@ -213,7 +213,9 @@ static void JHwBinder_native_registerService(
    sp<hardware::IBinder> binder = JHwBinder::GetNativeContext(env, thiz);
    sp<hardware::IBinder> binder = JHwBinder::GetNativeContext(env, thiz);


    status_t err = hardware::defaultServiceManager()->addService(
    status_t err = hardware::defaultServiceManager()->addService(
                String16(reinterpret_cast<const char16_t *>(serviceName)),
                String16(
                    reinterpret_cast<const char16_t *>(serviceName),
                    env->GetStringLength(serviceNameObj)),
                binder,
                binder,
                kVersion);
                kVersion);


@@ -245,12 +247,15 @@ static jobject JHwBinder_native_getService(


    LOG(INFO) << "looking for service '"
    LOG(INFO) << "looking for service '"
              << String8(String16(
              << String8(String16(
                          reinterpret_cast<const char16_t *>(serviceName))).string()
                          reinterpret_cast<const char16_t *>(serviceName),
                          env->GetStringLength(serviceNameObj))).string()
              << "'";
              << "'";


    sp<hardware::IBinder> service =
    sp<hardware::IBinder> service =
        hardware::defaultServiceManager()->getService(
        hardware::defaultServiceManager()->getService(
                String16(reinterpret_cast<const char16_t *>(serviceName)),
                String16(
                    reinterpret_cast<const char16_t *>(serviceName),
                    env->GetStringLength(serviceNameObj)),
                kVersion);
                kVersion);


    env->ReleaseStringCritical(serviceNameObj, serviceName);
    env->ReleaseStringCritical(serviceNameObj, serviceName);