From 3d8298e1a8b35dadb0a383aadb9a545ecab463e2 Mon Sep 17 00:00:00 2001 From: sergeyv Date: Thu, 21 Apr 2016 13:05:24 -0700 Subject: [PATCH] DisplayListCanvas: throw exception at attempt to draw bitmap with size > 100MB bug:26943116 Change-Id: If72c9f21ca2d8eb660ea2db4a42c8199f8d02472 --- core/java/android/view/DisplayListCanvas.java | 12 ++++++++++++ graphics/java/android/graphics/Canvas.java | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java index 415c29107a948..cb7c5a22fa401 100644 --- a/core/java/android/view/DisplayListCanvas.java +++ b/core/java/android/view/DisplayListCanvas.java @@ -37,6 +37,8 @@ public class DisplayListCanvas extends Canvas { // view hierarchy because display lists are generated recursively. private static final int POOL_LIMIT = 25; + private static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB + private static final SynchronizedPool sPool = new SynchronizedPool(POOL_LIMIT); @@ -249,4 +251,14 @@ public class DisplayListCanvas extends Canvas { private static native void nDrawRoundRect(long renderer, long propLeft, long propTop, long propRight, long propBottom, long propRx, long propRy, long propPaint); + + @Override + protected void throwIfCannotDraw(Bitmap bitmap) { + super.throwIfCannotDraw(bitmap); + int bitmapSize = bitmap.getByteCount(); + if (bitmapSize > MAX_BITMAP_SIZE) { + throw new RuntimeException( + "Canvas: trying to draw too large(" + bitmapSize + "bytes) bitmap."); + } + } } diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java index af99f79e4b3b1..c65880b2fccea 100644 --- a/graphics/java/android/graphics/Canvas.java +++ b/graphics/java/android/graphics/Canvas.java @@ -1266,7 +1266,7 @@ public class Canvas { /** * @hide */ - protected static void throwIfCannotDraw(Bitmap bitmap) { + protected void throwIfCannotDraw(Bitmap bitmap) { if (bitmap.isRecycled()) { throw new RuntimeException("Canvas: trying to use a recycled bitmap " + bitmap); }