diff options
| author | 2025-01-07 13:09:05 -0800 | |
|---|---|---|
| committer | 2025-01-07 13:09:05 -0800 | |
| commit | 6e16022516bd0e68bbd6797da94e57940e3f0544 (patch) | |
| tree | 2ffb108739caa0e56d1712892da9639efea43ac8 | |
| parent | f8bf888f67e32a1a177bd884ec73f4a20900fd1f (diff) | |
| parent | 87a04e1567f250d62cb680c755fd6fdd6c19dc3e (diff) | |
Merge "BaseBundle: fix unparcel error logic" into udc-dev am: 87a04e1567
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/30949753
Change-Id: Ifb1c0731c7230736a1b405c9540988637a092787
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | core/java/android/os/BaseBundle.java | 10 | ||||
| -rw-r--r-- | core/java/android/os/Parcel.java | 12 |
2 files changed, 10 insertions, 12 deletions
diff --git a/core/java/android/os/BaseBundle.java b/core/java/android/os/BaseBundle.java index 4e3adfbdda3f..9773134f6419 100644 --- a/core/java/android/os/BaseBundle.java +++ b/core/java/android/os/BaseBundle.java @@ -471,10 +471,10 @@ public class BaseBundle { map.erase(); map.ensureCapacity(count); } - int numLazyValues = 0; + int[] numLazyValues = new int[]{0}; try { - numLazyValues = parcelledData.readArrayMap(map, count, !parcelledByNative, - /* lazy */ ownsParcel, mClassLoader); + parcelledData.readArrayMap(map, count, !parcelledByNative, + /* lazy */ ownsParcel, mClassLoader, numLazyValues); } catch (BadParcelableException e) { if (sShouldDefuse) { Log.w(TAG, "Failed to parse Bundle, but defusing quietly", e); @@ -485,14 +485,14 @@ public class BaseBundle { } finally { mWeakParcelledData = null; if (ownsParcel) { - if (numLazyValues == 0) { + if (numLazyValues[0] == 0) { recycleParcel(parcelledData); } else { mWeakParcelledData = new WeakReference<>(parcelledData); } } - mLazyValues = numLazyValues; + mLazyValues = numLazyValues[0]; mParcelledByNative = false; mMap = map; // Set field last as it is volatile diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index 453aba34dbcf..11eb5ccb709c 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -5335,7 +5335,7 @@ public final class Parcel { private void readArrayMapInternal(@NonNull ArrayMap<? super String, Object> outVal, int size, @Nullable ClassLoader loader) { - readArrayMap(outVal, size, /* sorted */ true, /* lazy */ false, loader); + readArrayMap(outVal, size, /* sorted */ true, /* lazy */ false, loader, null); } /** @@ -5345,17 +5345,16 @@ public final class Parcel { * @param lazy Whether to populate the map with lazy {@link Function} objects for * length-prefixed values. See {@link Parcel#readLazyValue(ClassLoader)} for more * details. - * @return a count of the lazy values in the map + * @param lazyValueCount number of lazy values added here * @hide */ - int readArrayMap(ArrayMap<? super String, Object> map, int size, boolean sorted, - boolean lazy, @Nullable ClassLoader loader) { - int lazyValues = 0; + void readArrayMap(ArrayMap<? super String, Object> map, int size, boolean sorted, + boolean lazy, @Nullable ClassLoader loader, int[] lazyValueCount) { while (size > 0) { String key = readString(); Object value = (lazy) ? readLazyValue(loader) : readValue(loader); if (value instanceof LazyValue) { - lazyValues++; + lazyValueCount[0]++; } if (sorted) { map.append(key, value); @@ -5367,7 +5366,6 @@ public final class Parcel { if (sorted) { map.validate(); } - return lazyValues; } /** |