summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorStanislav Zholnin <zholnin@google.com>2021-05-05 14:07:02 +0100
committerStanislav Zholnin <zholnin@google.com>2021-05-05 14:07:02 +0100
commitecb45f7e331d2f2e1b4e58413b773535036bf26f (patch)
treef79cad6faca71aee0dfe6e6e34c64f4ddffe7f08 /core/java/android
parent0f314d689f962af287d82ded413846cd5afc788c (diff)
Fix issues with getHistoricalOps() results overflowing Binder connection.
Test: manually tested. Bug: 186193371 Change-Id: I391cb36a86308c89056965a47596707257a2a0af
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/app/AppOpsManager.java27
1 files changed, 7 insertions, 20 deletions
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 75a38c2380b9..971fdfd787f2 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -6844,7 +6844,7 @@ public class AppOpsManager {
writeLongSparseLongArrayToParcel(mAccessCount, parcel);
writeLongSparseLongArrayToParcel(mRejectCount, parcel);
writeLongSparseLongArrayToParcel(mAccessDuration, parcel);
- writeDiscreteAccessArrayToParcel(mDiscreteAccesses, parcel);
+ writeDiscreteAccessArrayToParcel(mDiscreteAccesses, parcel, flags);
}
@Override
@@ -9696,29 +9696,16 @@ public class AppOpsManager {
}
private static void writeDiscreteAccessArrayToParcel(
- @Nullable List<AttributedOpEntry> array, @NonNull Parcel parcel) {
- if (array != null) {
- final int size = array.size();
- parcel.writeInt(size);
- for (int i = 0; i < size; i++) {
- array.get(i).writeToParcel(parcel, 0);
- }
- } else {
- parcel.writeInt(-1);
- }
+ @Nullable List<AttributedOpEntry> array, @NonNull Parcel parcel, int flags) {
+ ParceledListSlice<AttributedOpEntry> listSlice =
+ array == null ? null : new ParceledListSlice<>(array);
+ parcel.writeParcelable(listSlice, flags);
}
private static @Nullable List<AttributedOpEntry> readDiscreteAccessArrayFromParcel(
@NonNull Parcel parcel) {
- final int size = parcel.readInt();
- if (size < 0) {
- return null;
- }
- final List<AttributedOpEntry> array = new ArrayList<>(size);
- for (int i = 0; i < size; i++) {
- array.add(new AttributedOpEntry(parcel));
- }
- return array;
+ final ParceledListSlice<AttributedOpEntry> listSlice = parcel.readParcelable(null);
+ return listSlice == null ? null : listSlice.getList();
}
/**