OSDN Git Service

Check recycled when createBitmap
authorCuiping.x.Shu <cuiping.x.shu@sony.com>
Wed, 22 Nov 2017 05:30:31 +0000 (13:30 +0800)
committerXiong Li <xiong.li@sony.com>
Sat, 23 Feb 2019 00:09:26 +0000 (00:09 +0000)
This is to avoid framework crash when application used
the recycled bitmap memory in createBitmap.

Bug:123656975

Change-Id: I98f93ce48c7bc91913d0b31bca1dc0a10eb319d7

graphics/java/android/graphics/Bitmap.java

index d6131cf..507f767 100644 (file)
@@ -814,7 +814,7 @@ public final class Bitmap implements Parcelable {
      * @return A bitmap that represents the specified subset of source
      * @throws IllegalArgumentException if the x, y, width, height values are
      *         outside of the dimensions of the source bitmap, or width is <= 0,
-     *         or height is <= 0
+     *         or height is <= 0, or if the source bitmap has already been recycled
      */
     public static Bitmap createBitmap(@NonNull Bitmap source, int x, int y, int width, int height,
             @Nullable Matrix m, boolean filter) {
@@ -827,6 +827,9 @@ public final class Bitmap implements Parcelable {
         if (y + height > source.getHeight()) {
             throw new IllegalArgumentException("y + height must be <= bitmap.height()");
         }
+        if (source.isRecycled()) {
+            throw new IllegalArgumentException("cannot use a recycled source in createBitmap");
+        }
 
         // check if we can just return our argument unchanged
         if (!source.isMutable() && x == 0 && y == 0 && width == source.getWidth() &&