summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Wachenschwanz <mwachens@google.com>2018-08-24 21:50:35 -0700
committerandroid-build-team Robot <android-build-team-robot@google.com>2018-11-02 19:14:30 +0000
commit7a170e4d50bc1e332de8e082042c1570a6a61202 (patch)
treebe2cd6f012599320e5ba1fc0e40cb3f99cc0e4f2
parent742cbd1713862e9845d134bf330e204030f3f282 (diff)
downloadbase-7a170e4d50bc1e332de8e082042c1570a6a61202.tar.gz
Verify number of Map entries written to Parcel
Make sure the number of entries written by Parcel#writeMapInternal matches the size written. If a mismatch were allowed, an exploitable scenario could occur where the data read from the Parcel would not match the data written. Fixes: 112859604 Test: cts-tradefed run cts -m CtsOsTestCases -t android.os.cts.ParcelTest Change-Id: I325d08a8b66b6e80fe76501359c41b6656848607 Merged-In: I325d08a8b66b6e80fe76501359c41b6656848607 (cherry picked from commit 057a01d1f38e9b46d3faa4059fdd7c8717681ea0)
-rw-r--r--core/java/android/os/Parcel.java10
1 files changed, 9 insertions, 1 deletions
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java
index 514292872e90..460f12510d45 100644
--- a/core/java/android/os/Parcel.java
+++ b/core/java/android/os/Parcel.java
@@ -835,11 +835,19 @@ public final class Parcel {
return;
}
Set<Map.Entry<String,Object>> entries = val.entrySet();
- writeInt(entries.size());
+ int size = entries.size();
+ writeInt(size);
+
for (Map.Entry<String,Object> e : entries) {
writeValue(e.getKey());
writeValue(e.getValue());
+ size--;
}
+
+ if (size != 0) {
+ throw new BadParcelableException("Map size does not match number of entries!");
+ }
+
}
/**