libbinder: Parcel::appendFrom better format check
(thanks jooyung@ for the catch here)
Even if we have two RPC parcels, they need to both be for the RPC
session. Otherwise, they might be at different versions (and we don't
really have a way to reconcile this).
Bug: 182939048
Test: binderRpcTest
Change-Id: I5180ebc681ccc79bf05a3fc0900a9b240e793a66
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp
index dee5309..805e576 100644
--- a/libs/binder/Parcel.cpp
+++ b/libs/binder/Parcel.cpp
@@ -411,8 +411,9 @@
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;
}