diff options
author | 2016-01-25 18:45:15 +0000 | |
---|---|---|
committer | 2016-01-25 18:45:15 +0000 | |
commit | 83b09fb9194e80c4eba86f5a65aad2d0b8bf036d (patch) | |
tree | ee7600a5c0e75f1d81da7fd2a752c792046b0203 | |
parent | 1ebdb21753ebb2db559f453b643ae84928ab566c (diff) | |
parent | 25f0dc440d6c9239a873e6d1fc98b0d8e3eb7c7f (diff) |
Merge "Validate Region.orSelf arguments"
-rw-r--r-- | libs/hwui/BakedOpRenderer.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp index e65746eea98a..a808b886a90d 100644 --- a/libs/hwui/BakedOpRenderer.cpp +++ b/libs/hwui/BakedOpRenderer.cpp @@ -331,9 +331,28 @@ void BakedOpRenderer::renderFunctor(const FunctorOp& op, const BakedOpState& sta mRenderState.invokeFunctor(op.functor, DrawGlInfo::kModeDraw, &info); } +#define VALIDATE_RECT_ARG(rect, arg) \ + ((isnanf(rect.arg) || rect.arg < -10000 || rect.arg > 10000) ? (\ + ALOGW("suspicious " #rect "." #arg "! %f", rect.arg),\ + false) : true) + +#define VALIDATE_RECT(rect) \ + VALIDATE_RECT_ARG(rect, bottom) & \ + VALIDATE_RECT_ARG(rect, left) & \ + VALIDATE_RECT_ARG(rect, top) & \ + VALIDATE_RECT_ARG(rect, right) + void BakedOpRenderer::dirtyRenderTarget(const Rect& uiDirty) { if (mRenderTarget.offscreenBuffer) { - android::Rect dirty(uiDirty.left, uiDirty.top, uiDirty.right, uiDirty.bottom); + bool valid = VALIDATE_RECT(uiDirty); + android::Rect dirty; + if (valid) { + dirty = android::Rect(uiDirty.left, uiDirty.top, uiDirty.right, uiDirty.bottom); + } else { + dirty = android::Rect(0, 0, + mRenderTarget.offscreenBuffer->viewportWidth, + mRenderTarget.offscreenBuffer->viewportHeight); + } mRenderTarget.offscreenBuffer->region.orSelf(dirty); } } |