Parcel: remove use of getOpenAshmemSize

Parcel native pointers are created when the Parcel is created, and they
are destroyed in finalize. When a Java object is finalized, we shouldn't
be calling methods on this (note - due to the way that compareData is
written, it will throw NPE if otherParcel is null - and if this were not
the case, the use of getOpenAshmemSize here - which will frequently be
zero - would break the comparison here).

Bug: 195752513
Test: atest android.os.ParcelTest android.os.cts.ParcelTest
Change-Id: Iad86624d6e0aad2ca37273ddbcb456dff7f48d46
This commit is contained in:
Steven Moreland
2021-10-08 13:45:07 -07:00
parent c03b0fa033
commit a4530ceabc

View File

@@ -596,13 +596,10 @@ static jint android_os_Parcel_compareData(JNIEnv* env, jclass clazz, jlong thisN
jlong otherNativePtr)
{
Parcel* thisParcel = reinterpret_cast<Parcel*>(thisNativePtr);
if (thisParcel == NULL) {
return 0;
}
LOG_ALWAYS_FATAL_IF(thisParcel == nullptr, "Should not be null");
Parcel* otherParcel = reinterpret_cast<Parcel*>(otherNativePtr);
if (otherParcel == NULL) {
return thisParcel->getOpenAshmemSize();
}
LOG_ALWAYS_FATAL_IF(otherParcel == nullptr, "Should not be null");
return thisParcel->compareData(*otherParcel);
}