ParcelableHolder shouldn't write anything for empty case

If neither Parcel nor Parcelable exists, ParcelableHolder'd better
write nothing like NDK and C++ backend.

In the case of empty ParcelableHolder
As-is(Java):
 4 -> Size
 -1 -> Existence(empty string)

To-be(NDK, C++ now):
 0 -> Size

Test: atest CtsNdkBinderTestCases
Bug: 173682663
Change-Id: I816108fdc59170ea7408f0633295ba978f1ef9d5
This commit is contained in:
Jeongik Cha
2020-11-24 22:44:42 +09:00
parent 48695cb073
commit 3f5ffa615a

View File

@@ -170,16 +170,21 @@ public final class ParcelableHolder implements Parcelable {
mParcelable = null;
int dataSize = parcel.readInt();
if (dataSize < 0) {
throw new IllegalArgumentException("dataSize from parcel is negative");
} else if (dataSize == 0) {
if (mParcel != null) {
mParcel.recycle();
mParcel = null;
}
return;
}
if (mParcel == null) {
mParcel = Parcel.obtain();
}
mParcel.setDataPosition(0);
mParcel.setDataSize(0);
int dataSize = parcel.readInt();
if (dataSize < 0) {
throw new IllegalArgumentException("dataSize from parcel is negative");
}
int dataStartPos = parcel.dataPosition();
mParcel.appendFrom(parcel, dataStartPos, dataSize);
@@ -196,6 +201,11 @@ public final class ParcelableHolder implements Parcelable {
return;
}
if (mParcelable == null) {
parcel.writeInt(0);
return;
}
int sizePos = parcel.dataPosition();
parcel.writeInt(0);
int dataStartPos = parcel.dataPosition();