summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author John Reck <jreck@google.com> 2016-01-25 18:45:15 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-01-25 18:45:15 +0000
commit83b09fb9194e80c4eba86f5a65aad2d0b8bf036d (patch)
treeee7600a5c0e75f1d81da7fd2a752c792046b0203
parent1ebdb21753ebb2db559f453b643ae84928ab566c (diff)
parent25f0dc440d6c9239a873e6d1fc98b0d8e3eb7c7f (diff)
Merge "Validate Region.orSelf arguments"
-rw-r--r--libs/hwui/BakedOpRenderer.cpp21
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);
}
}