From ecb45f7e331d2f2e1b4e58413b773535036bf26f Mon Sep 17 00:00:00 2001 From: Stanislav Zholnin Date: Wed, 5 May 2021 14:07:02 +0100 Subject: Fix issues with getHistoricalOps() results overflowing Binder connection. Test: manually tested. Bug: 186193371 Change-Id: I391cb36a86308c89056965a47596707257a2a0af --- core/java/android/app/AppOpsManager.java | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) (limited to 'core/java/android') 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 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 array, @NonNull Parcel parcel, int flags) { + ParceledListSlice listSlice = + array == null ? null : new ParceledListSlice<>(array); + parcel.writeParcelable(listSlice, flags); } private static @Nullable List readDiscreteAccessArrayFromParcel( @NonNull Parcel parcel) { - final int size = parcel.readInt(); - if (size < 0) { - return null; - } - final List array = new ArrayList<>(size); - for (int i = 0; i < size; i++) { - array.add(new AttributedOpEntry(parcel)); - } - return array; + final ParceledListSlice listSlice = parcel.readParcelable(null); + return listSlice == null ? null : listSlice.getList(); } /** -- cgit v1.2.3