Loading core/java/android/os/Parcel.java +11 −7 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.os; import static android.security.Flags.failOnParcelSizeMismatch; import static com.android.internal.util.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; Loading @@ -28,7 +30,6 @@ import android.annotation.SuppressLint; import android.annotation.TestApi; import android.app.AppOpsManager; import android.compat.annotation.UnsupportedAppUsage; import android.os.Flags; import android.ravenwood.annotation.RavenwoodKeepWholeClass; import android.ravenwood.annotation.RavenwoodReplace; import android.ravenwood.annotation.RavenwoodThrow; Loading @@ -54,8 +55,6 @@ import dalvik.annotation.optimization.CriticalNative; import dalvik.annotation.optimization.FastNative; import dalvik.annotation.optimization.NeverInline; import java.nio.BufferOverflowException; import java.nio.ReadOnlyBufferException; import libcore.util.SneakyThrow; import java.io.ByteArrayInputStream; Loading @@ -66,12 +65,14 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.ObjectStreamClass; import java.io.Serializable; import java.nio.ByteBuffer; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.nio.BufferOverflowException; import java.nio.ByteBuffer; import java.nio.ReadOnlyBufferException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; Loading Loading @@ -4715,9 +4716,12 @@ public final class Parcel { object = readValue(type, loader, clazz, itemTypes); int actual = dataPosition() - start; if (actual != length) { Slog.wtfStack(TAG, "Unparcelling of " + object + " of type " + Parcel.valueTypeToString(type) + " consumed " + actual + " bytes, but " + length + " expected."); String msg = "Unparcelling of " + object + " of type " + Parcel.valueTypeToString( type) + " consumed " + actual + " bytes, but " + length + " expected."; if (failOnParcelSizeMismatch()) { throw new BadParcelableException(msg); } Slog.wtfStack(TAG, msg); } } else { object = readValue(type, loader, clazz, itemTypes); Loading core/java/android/security/responsible_apis_flags.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -165,3 +165,10 @@ flag { description: "Flag for restricting implicit URI grants on Send action intents" bug: "295238578" } flag { name: "fail_on_parcel_size_mismatch" namespace: "responsible_apis" description: "Flag for failing instead of logging in case of parcel size mismatches" bug: "416031865" } Loading
core/java/android/os/Parcel.java +11 −7 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.os; import static android.security.Flags.failOnParcelSizeMismatch; import static com.android.internal.util.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; Loading @@ -28,7 +30,6 @@ import android.annotation.SuppressLint; import android.annotation.TestApi; import android.app.AppOpsManager; import android.compat.annotation.UnsupportedAppUsage; import android.os.Flags; import android.ravenwood.annotation.RavenwoodKeepWholeClass; import android.ravenwood.annotation.RavenwoodReplace; import android.ravenwood.annotation.RavenwoodThrow; Loading @@ -54,8 +55,6 @@ import dalvik.annotation.optimization.CriticalNative; import dalvik.annotation.optimization.FastNative; import dalvik.annotation.optimization.NeverInline; import java.nio.BufferOverflowException; import java.nio.ReadOnlyBufferException; import libcore.util.SneakyThrow; import java.io.ByteArrayInputStream; Loading @@ -66,12 +65,14 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.ObjectStreamClass; import java.io.Serializable; import java.nio.ByteBuffer; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.nio.BufferOverflowException; import java.nio.ByteBuffer; import java.nio.ReadOnlyBufferException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; Loading Loading @@ -4715,9 +4716,12 @@ public final class Parcel { object = readValue(type, loader, clazz, itemTypes); int actual = dataPosition() - start; if (actual != length) { Slog.wtfStack(TAG, "Unparcelling of " + object + " of type " + Parcel.valueTypeToString(type) + " consumed " + actual + " bytes, but " + length + " expected."); String msg = "Unparcelling of " + object + " of type " + Parcel.valueTypeToString( type) + " consumed " + actual + " bytes, but " + length + " expected."; if (failOnParcelSizeMismatch()) { throw new BadParcelableException(msg); } Slog.wtfStack(TAG, msg); } } else { object = readValue(type, loader, clazz, itemTypes); Loading
core/java/android/security/responsible_apis_flags.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -165,3 +165,10 @@ flag { description: "Flag for restricting implicit URI grants on Send action intents" bug: "295238578" } flag { name: "fail_on_parcel_size_mismatch" namespace: "responsible_apis" description: "Flag for failing instead of logging in case of parcel size mismatches" bug: "416031865" }