diff options
| -rw-r--r-- | libs/binder/Parcel.cpp | 5 | ||||
| -rw-r--r-- | libs/binder/tests/binderRpcTest.cpp | 12 |
2 files changed, 13 insertions, 4 deletions
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp index dee5309602..805e5768bc 100644 --- a/libs/binder/Parcel.cpp +++ b/libs/binder/Parcel.cpp @@ -411,8 +411,9 @@ 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."); + if (mSession != parcel->mSession) { + ALOGE("Cannot append Parcel from one context to another. They may be different formats, " + "and objects are specific to a context."); return BAD_TYPE; } diff --git a/libs/binder/tests/binderRpcTest.cpp b/libs/binder/tests/binderRpcTest.cpp index d68c6fffd1..8267702336 100644 --- a/libs/binder/tests/binderRpcTest.cpp +++ b/libs/binder/tests/binderRpcTest.cpp @@ -690,13 +690,21 @@ TEST_P(BinderRpc, TransactionsMustBeMarkedRpc) { } TEST_P(BinderRpc, AppendSeparateFormats) { - auto proc = createRpcTestSocketServerProcess({}); + auto proc1 = createRpcTestSocketServerProcess({}); + auto proc2 = createRpcTestSocketServerProcess({}); + + Parcel pRaw; Parcel p1; - p1.markForBinder(proc.rootBinder); + p1.markForBinder(proc1.rootBinder); p1.writeInt32(3); + EXPECT_EQ(BAD_TYPE, p1.appendFrom(&pRaw, 0, p1.dataSize())); + EXPECT_EQ(BAD_TYPE, pRaw.appendFrom(&p1, 0, p1.dataSize())); + Parcel p2; + p2.markForBinder(proc2.rootBinder); + p2.writeInt32(7); EXPECT_EQ(BAD_TYPE, p1.appendFrom(&p2, 0, p2.dataSize())); EXPECT_EQ(BAD_TYPE, p2.appendFrom(&p1, 0, p1.dataSize())); |