diff options
| author | Stanislav Zholnin <zholnin@google.com> | 2021-05-05 14:07:02 +0100 |
|---|---|---|
| committer | Stanislav Zholnin <zholnin@google.com> | 2021-05-05 14:07:02 +0100 |
| commit | ecb45f7e331d2f2e1b4e58413b773535036bf26f (patch) | |
| tree | f79cad6faca71aee0dfe6e6e34c64f4ddffe7f08 /core/java/android | |
| parent | 0f314d689f962af287d82ded413846cd5afc788c (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.java | 27 |
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(); } /** |
