diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp index 79bfa17bdd046..70e6604fddeb4 100644 --- a/core/jni/android/graphics/BitmapFactory.cpp +++ b/core/jni/android/graphics/BitmapFactory.cpp @@ -507,9 +507,18 @@ static jobject doDecode(JNIEnv* env, std::unique_ptr stream, ninePatchChunk, ninePatchInsets, -1); } + // Speculative fix for b/112551574. It doesn't seem like |b| can be null. If it is, print some + // info that might be helpful to diagnose. + Bitmap* b = defaultAllocator.getStorageObjAndReset(); + if (!b) { + ALOGW("defaultAllocator has no storage object!"); + ALOGW("\tjavaBitmap: %s", (javaBitmap == nullptr ? "null" : "present")); + ALOGW("\tisHardware: %s", (isHardware ? "true" : "false")); + ALOGW("\twillScale: %s", (willScale ? "true" : "false")); + return nullptr; + } // now create the java bitmap - return bitmap::createBitmap(env, defaultAllocator.getStorageObjAndReset(), - bitmapCreateFlags, ninePatchChunk, ninePatchInsets, -1); + return bitmap::createBitmap(env, b, bitmapCreateFlags, ninePatchChunk, ninePatchInsets, -1); } static jobject nativeDecodeStream(JNIEnv* env, jobject clazz, jobject is, jbyteArray storage,