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
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user