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

Commit 8fafdfc1 authored by Steven Moreland's avatar Steven Moreland Committed by Automerger Merge Worker
Browse files

Merge "libbinder: RPC checks for appendParcel" am: 1fed65e1 am: b8bc32db am: 3f6fc175

Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1663444

Change-Id: I0befc25cacb2f8384a972efbb5c6992b8bb44c98
parents 9432a357 3f6fc175
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -418,6 +418,11 @@ status_t Parcel::setData(const uint8_t* buffer, size_t len)

status_t Parcel::appendFrom(const Parcel *parcel, size_t offset, size_t len)
{
    if (parcel->isForRpc() != isForRpc()) {
        ALOGE("Cannot append Parcel of one format to another.");
        return BAD_TYPE;
    }

    status_t err;
    const uint8_t *data = parcel->mData;
    const binder_size_t *objects = parcel->mObjects;
+13 −0
Original line number Diff line number Diff line
@@ -406,6 +406,19 @@ TEST_P(BinderRpc, TransactionsMustBeMarkedRpc) {
    EXPECT_EQ(BAD_TYPE, proc.rootBinder->transact(IBinder::PING_TRANSACTION, data, &reply, 0));
}

TEST_P(BinderRpc, AppendSeparateFormats) {
    auto proc = createRpcTestSocketServerProcess(1);

    Parcel p1;
    p1.markForBinder(proc.rootBinder);
    p1.writeInt32(3);

    Parcel p2;

    EXPECT_EQ(BAD_TYPE, p1.appendFrom(&p2, 0, p2.dataSize()));
    EXPECT_EQ(BAD_TYPE, p2.appendFrom(&p1, 0, p1.dataSize()));
}

TEST_P(BinderRpc, UnknownTransaction) {
    auto proc = createRpcTestSocketServerProcess(1);
    Parcel data;