summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lucas Dupin <dupin@google.com> 2018-08-21 21:30:01 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-08-21 21:30:01 +0000
commit96d9c3f91ee27c0113614be95d9b588cc97dbb36 (patch)
tree84f4559e9bbe5aad3a209044b0c7395e5ff243f3
parentb2339319fb6db1e7305b647a2d95e31f9833b902 (diff)
parentd8e124422549d6b0b2bcb3407cc67e230192edc5 (diff)
Merge "Do not allow wallpapers that are too large"
-rw-r--r--core/java/android/view/DisplayListCanvas.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/ImageWallpaper.java8
2 files changed, 8 insertions, 2 deletions
diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java
index a7755a288530..4b946d7f430f 100644
--- a/core/java/android/view/DisplayListCanvas.java
+++ b/core/java/android/view/DisplayListCanvas.java
@@ -40,7 +40,7 @@ public final class DisplayListCanvas extends RecordingCanvas {
// 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
+ public static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB
private static final SynchronizedPool<DisplayListCanvas> sPool =
new SynchronizedPool<>(POOL_LIMIT);
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index 50d862dee29c..39e315566daf 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -30,6 +30,7 @@ import android.service.wallpaper.WallpaperService;
import android.util.Log;
import android.view.Display;
import android.view.DisplayInfo;
+import android.view.DisplayListCanvas;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.WindowManager;
@@ -366,7 +367,12 @@ public class ImageWallpaper extends WallpaperService {
protected Bitmap doInBackground(Void... params) {
Throwable exception;
try {
- return mWallpaperManager.getBitmap(true /* hardware */);
+ Bitmap wallpaper = mWallpaperManager.getBitmap(true /* hardware */);
+ if (wallpaper != null
+ && wallpaper.getByteCount() > DisplayListCanvas.MAX_BITMAP_SIZE) {
+ throw new RuntimeException("Wallpaper is too large to draw!");
+ }
+ return wallpaper;
} catch (RuntimeException | OutOfMemoryError e) {
exception = e;
}