From 0a458ab55ad77dba54dcc321f76ef79c1eeeb503 Mon Sep 17 00:00:00 2001 From: Nader Jawad Date: Mon, 12 Apr 2021 14:30:21 -0700 Subject: Fixed issue with invalid stretch params Refactored error checking logic to ignore all invalid parameters for vecX/vecY regardless if NaN parameters were computed through intermediate math operations or provided as inputs Fixes: 183781985 Test: Added CTS test Change-Id: Ib9f3dd1becc0486dc15ce306660bd5d469b81256 --- core/java/android/widget/EdgeEffect.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/core/java/android/widget/EdgeEffect.java b/core/java/android/widget/EdgeEffect.java index ae426d2c897f..50fca043d4e0 100644 --- a/core/java/android/widget/EdgeEffect.java +++ b/core/java/android/widget/EdgeEffect.java @@ -626,20 +626,14 @@ public class EdgeEffect { // assume rotations of increments of 90 degrees float x = mTmpPoints[10] - mTmpPoints[8]; float width = right - left; - float vecX = 0f; - if (width > 0) { - vecX = dampStretchVector(Math.max(-1f, Math.min(1f, x / width))); - } + float vecX = dampStretchVector(Math.max(-1f, Math.min(1f, x / width))); float y = mTmpPoints[11] - mTmpPoints[9]; float height = bottom - top; - float vecY = 0f; - if (height > 0) { - vecY = dampStretchVector(Math.max(-1f, Math.min(1f, y / height))); - } + float vecY = dampStretchVector(Math.max(-1f, Math.min(1f, y / height))); - boolean hasStretchVectors = Float.compare(vecX, 0) != 0 || Float.compare(vecY, 0) != 0; - if (right > left && bottom > top && mWidth > 0 && mHeight > 0 && hasStretchVectors) { + boolean hasValidVectors = Float.isFinite(vecX) && Float.isFinite(vecY); + if (right > left && bottom > top && mWidth > 0 && mHeight > 0 && hasValidVectors) { renderNode.stretch( left, top, -- cgit v1.2.3-59-g8ed1b