diff options
Diffstat (limited to 'libs/binder/Parcel.cpp')
-rw-r--r-- | libs/binder/Parcel.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp index a0fc4d0..8eeab7a 100644 --- a/libs/binder/Parcel.cpp +++ b/libs/binder/Parcel.cpp @@ -399,6 +399,8 @@ status_t Parcel::appendFrom(const Parcel *parcel, size_t offset, size_t len) mDataPos += len; mDataSize += len; + err = NO_ERROR; + if (numObjects > 0) { // grow objects if (mObjectsCapacity < mObjectsSize + numObjects) { @@ -430,11 +432,21 @@ status_t Parcel::appendFrom(const Parcel *parcel, size_t offset, size_t len) flat->handle = dup(flat->handle); flat->cookie = (void*)1; mHasFds = mFdsKnown = true; + if (!mAllowFds) { + err = FDS_NOT_ALLOWED; + } } } } - return NO_ERROR; + return err; +} + +bool Parcel::setAllowFds(bool allowFds) +{ + const bool origValue = mAllowFds; + mAllowFds = allowFds; + return origValue; } bool Parcel::hasFileDescriptors() const @@ -759,6 +771,9 @@ restart_write: // remember if it's a file descriptor if (val.type == BINDER_TYPE_FD) { + if (!mAllowFds) { + return FDS_NOT_ALLOWED; + } mHasFds = mFdsKnown = true; } @@ -1283,6 +1298,7 @@ status_t Parcel::restartWrite(size_t desired) mNextObjectHint = 0; mHasFds = false; mFdsKnown = true; + mAllowFds = true; return NO_ERROR; } @@ -1434,6 +1450,7 @@ void Parcel::initState() mNextObjectHint = 0; mHasFds = false; mFdsKnown = true; + mAllowFds = true; mOwner = NULL; } |