Fixed NaN exceptions in EdgeEffect
Added more error checking logic to protect against invalid usages of EdgeEffect that include setSize not being called or invalid bounds parameters. Fixes: 183945458 Fixes: 183895581 Fixes: 183781985 Test: Added CTS test to EdgeEffectTests Change-Id: I1eabd96206216526dbe843d0fb8c0fe6cccd8395
This commit is contained in:
@@ -626,20 +626,31 @@ public class EdgeEffect {
|
||||
// assume rotations of increments of 90 degrees
|
||||
float x = mTmpPoints[10] - mTmpPoints[8];
|
||||
float width = right - left;
|
||||
float vecX = dampStretchVector(Math.max(-1f, Math.min(1f, x / width)));
|
||||
float vecX = 0f;
|
||||
if (width > 0) {
|
||||
vecX = dampStretchVector(Math.max(-1f, Math.min(1f, x / width)));
|
||||
}
|
||||
|
||||
float y = mTmpPoints[11] - mTmpPoints[9];
|
||||
float height = bottom - top;
|
||||
float vecY = dampStretchVector(Math.max(-1f, Math.min(1f, y / height)));
|
||||
renderNode.stretch(
|
||||
left,
|
||||
top,
|
||||
right,
|
||||
bottom,
|
||||
vecX,
|
||||
vecY,
|
||||
mWidth,
|
||||
mHeight
|
||||
);
|
||||
float vecY = 0f;
|
||||
if (height > 0) {
|
||||
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) {
|
||||
renderNode.stretch(
|
||||
left,
|
||||
top,
|
||||
right,
|
||||
bottom,
|
||||
vecX,
|
||||
vecY,
|
||||
mWidth,
|
||||
mHeight
|
||||
);
|
||||
}
|
||||
} else {
|
||||
// This is TYPE_STRETCH and drawing into a Canvas that isn't a Recording Canvas,
|
||||
// so no effect can be shown. Just end the effect.
|
||||
|
||||
Reference in New Issue
Block a user