diff options
author | Dianne Hackborn <hackbod@google.com> | 2011-09-28 23:19:47 -0400 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2011-10-03 16:58:41 -0700 |
commit | 9ecebbfbf768fd63e9a6c9a09c86d81c7737ee2d (patch) | |
tree | 08d24c5413fa49ac6386f8b396f29e297e728fbd /core/java/android/os | |
parent | 8ebf1efd66516340bedbf0d0a19d5e96cc28fa20 (diff) | |
download | frameworks_base-9ecebbfbf768fd63e9a6c9a09c86d81c7737ee2d.zip frameworks_base-9ecebbfbf768fd63e9a6c9a09c86d81c7737ee2d.tar.gz frameworks_base-9ecebbfbf768fd63e9a6c9a09c86d81c7737ee2d.tar.bz2 |
Add mechanism for Parcel to not allow FDs to be written to it.
This is to help implement issue #5224703.
Change-Id: I026a5890495537d15b57fe61227a640aac806d46
Diffstat (limited to 'core/java/android/os')
-rw-r--r-- | core/java/android/os/Bundle.java | 51 | ||||
-rw-r--r-- | core/java/android/os/Parcel.java | 3 |
2 files changed, 35 insertions, 19 deletions
diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java index c288f8a..e698c1d 100644 --- a/core/java/android/os/Bundle.java +++ b/core/java/android/os/Bundle.java @@ -54,6 +54,7 @@ public final class Bundle implements Parcelable, Cloneable { private boolean mHasFds = false; private boolean mFdsKnown = true; + private boolean mAllowFds = true; /** * The ClassLoader used when unparcelling data from mParcelledData. @@ -186,7 +187,14 @@ public final class Bundle implements Parcelable, Cloneable { public ClassLoader getClassLoader() { return mClassLoader; } - + + /** @hide */ + public boolean setAllowFds(boolean allowFds) { + boolean orig = mAllowFds; + mAllowFds = allowFds; + return orig; + } + /** * Clones the current Bundle. The internal map is cloned, but the keys and * values to which it refers are copied by reference. @@ -1589,24 +1597,29 @@ public final class Bundle implements Parcelable, Cloneable { * @param parcel The parcel to copy this bundle to. */ public void writeToParcel(Parcel parcel, int flags) { - if (mParcelledData != null) { - int length = mParcelledData.dataSize(); - parcel.writeInt(length); - parcel.writeInt(0x4C444E42); // 'B' 'N' 'D' 'L' - parcel.appendFrom(mParcelledData, 0, length); - } else { - parcel.writeInt(-1); // dummy, will hold length - parcel.writeInt(0x4C444E42); // 'B' 'N' 'D' 'L' - - int oldPos = parcel.dataPosition(); - parcel.writeMapInternal(mMap); - int newPos = parcel.dataPosition(); - - // Backpatch length - parcel.setDataPosition(oldPos - 8); - int length = newPos - oldPos; - parcel.writeInt(length); - parcel.setDataPosition(newPos); + final boolean oldAllowFds = parcel.setAllowFds(mAllowFds); + try { + if (mParcelledData != null) { + int length = mParcelledData.dataSize(); + parcel.writeInt(length); + parcel.writeInt(0x4C444E42); // 'B' 'N' 'D' 'L' + parcel.appendFrom(mParcelledData, 0, length); + } else { + parcel.writeInt(-1); // dummy, will hold length + parcel.writeInt(0x4C444E42); // 'B' 'N' 'D' 'L' + + int oldPos = parcel.dataPosition(); + parcel.writeMapInternal(mMap); + int newPos = parcel.dataPosition(); + + // Backpatch length + parcel.setDataPosition(oldPos - 8); + int length = newPos - oldPos; + parcel.writeInt(length); + parcel.setDataPosition(newPos); + } + } finally { + parcel.setAllowFds(oldAllowFds); } } diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index e9ed676..36a08b9 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -323,6 +323,9 @@ public final class Parcel { */ public final native void setDataCapacity(int size); + /** @hide */ + public final native boolean setAllowFds(boolean allowFds); + /** * Returns the raw bytes of the parcel. * |