From a9d72c8ac33888c4151055ca4dbaf63381282770 Mon Sep 17 00:00:00 2001 From: Garfield Tan Date: Tue, 8 Mar 2022 13:59:56 -0800 Subject: [PATCH] Add argument checks in setScale and setCrop They are now public API, so they should perform the same checks as in respective calls with ASurfaceTransaction. Bug: 210837722 Test: atest SurfaceControlTest Change-Id: I1f17f8402dc116a419189f31faf351ffa967ecda --- core/java/android/view/SurfaceControl.java | 4 ++++ graphics/java/android/graphics/Rect.java | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 64f5668d8c141..f3c65eae8ba84 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -64,6 +64,7 @@ import android.util.proto.ProtoOutputStream; import android.view.Surface.OutOfResourcesException; import com.android.internal.annotations.GuardedBy; +import com.android.internal.util.Preconditions; import com.android.internal.util.VirtualRefBasePtr; import dalvik.system.CloseGuard; @@ -2961,6 +2962,8 @@ public final class SurfaceControl implements Parcelable { @NonNull public Transaction setScale(@NonNull SurfaceControl sc, float scaleX, float scaleY) { checkPreconditions(sc); + Preconditions.checkArgument(scaleX >= 0, "Negative value passed in for scaleX"); + Preconditions.checkArgument(scaleY >= 0, "Negative value passed in for scaleY"); nativeSetScale(mNativeObject, sc.mNativeObject, scaleX, scaleY); return this; } @@ -3205,6 +3208,7 @@ public final class SurfaceControl implements Parcelable { public @NonNull Transaction setCrop(@NonNull SurfaceControl sc, @Nullable Rect crop) { checkPreconditions(sc); if (crop != null) { + Preconditions.checkArgument(crop.isValid(), "Crop isn't valid."); nativeSetWindowCrop(mNativeObject, sc.mNativeObject, crop.left, crop.top, crop.right, crop.bottom); } else { diff --git a/graphics/java/android/graphics/Rect.java b/graphics/java/android/graphics/Rect.java index 7e68bc06d506b..1a522bd5e7947 100644 --- a/graphics/java/android/graphics/Rect.java +++ b/graphics/java/android/graphics/Rect.java @@ -290,6 +290,14 @@ public final class Rect implements Parcelable { return left >= right || top >= bottom; } + /** + * @return {@code true} if the rectangle is valid (left <= right and top <= bottom). + * @hide + */ + public boolean isValid() { + return left <= right && top <= bottom; + } + /** * @return the rectangle's width. This does not check for a valid rectangle * (i.e. left <= right) so the result may be negative.