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

Commit 2705b410 authored by Steven Moreland's avatar Steven Moreland
Browse files

Handle JavaBBinderHolder not init w/ mockito

Some mockito users mocking binders like:

    doReturn(...).when(...).asBinder()

Aren't seeing this field initialized when they are making transactions
on this binder object. This causes obtain(IBinder) to fail.

Bug: 252888512
Test: ServiceStateTrackerTest
Change-Id: Ib65948b86cf91f053e26af35629aa3f7d6062c51
parent f9a1e3c9
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -101,9 +101,18 @@ static void android_os_Parcel_markSensitive(jlong nativePtr)
static void android_os_Parcel_markForBinder(JNIEnv* env, jclass clazz, jlong nativePtr,
                                            jobject binder)
{
    LOG_ALWAYS_FATAL_IF(binder == nullptr, "Null binder specified for markForBinder");

    Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
    if (parcel) {
        parcel->markForBinder(ibinderForJavaObject(env, binder));
        sp<IBinder> nBinder = ibinderForJavaObject(env, binder);

        if (nBinder == nullptr) {
            ALOGE("Native binder in markForBinder is null for non-null jobject");
            return;
        }

        parcel->markForBinder(nBinder);
    }
}

+6 −0
Original line number Diff line number Diff line
@@ -798,6 +798,12 @@ sp<IBinder> ibinderForJavaObject(JNIEnv* env, jobject obj)
    if (env->IsInstanceOf(obj, gBinderOffsets.mClass)) {
        JavaBBinderHolder* jbh = (JavaBBinderHolder*)
            env->GetLongField(obj, gBinderOffsets.mObject);

        if (jbh == nullptr) {
            ALOGE("JavaBBinderHolder null on binder");
            return nullptr;
        }

        return jbh->get(env, obj);
    }