From: Mauro Rossi Date: Sun, 3 Mar 2019 15:28:41 +0000 (+0100) Subject: android_view_ThreadedRenderer: prevent Null Pointer Exception in createBitmap X-Git-Tag: android-x86-8.1-r2~2 X-Git-Url: http://git.osdn.net/view?p=android-x86%2Fframeworks-base.git;a=commitdiff_plain;h=d488a6c2bbedc06fc22942555d0157e7bf09f135 android_view_ThreadedRenderer: prevent Null Pointer Exception in createBitmap To avoid Playstore crashes with nouveau and Hardware Bitmap, a check is added to bitmap returned by Bitmap::createFrom(buffer) inspired by similar behavior in Bitmap.cpp Bitmap_createHardwareBitmap() Fixes the following crash: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: 'Android-x86/android_x86/x86:8.1.0/OPM8.181005.003/uten01131829:userdebug/test-keys' Revision: '0' ABI: 'x86' pid: 4644, tid: 4644, name: android.vending >>> com.android.vending <<< signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xc Cause: null pointer dereference eax 89195380 ebx b1d36290 ecx 00000000 edx ae783074 esi 00000000 edi ae7a9380 xcs 00000073 xds 0000007b xes 0000007b xfs 0000003b xss 0000007b eip b1c4f7c8 ebp bff902c8 esp bff9028c flags 00010246 backtrace: #00 pc 000fd7c8 /system/lib/libandroid_runtime.so (android::bitmap::createBitmap(_JNIEnv*, android::Bitmap*, int, _jbyteArray*, _jobject*, int)+104) #01 pc 000d08ca /system/lib/libandroid_runtime.so (android::android_view_ThreadedRenderer_createHardwareBitmapFromRenderNode(_JNIEnv*, _jobject*, long long, int, int)+1002) --- diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp index e757ddd8cdde..29226c39a939 100644 --- a/core/jni/android_view_ThreadedRenderer.cpp +++ b/core/jni/android_view_ThreadedRenderer.cpp @@ -923,6 +923,10 @@ static jobject android_view_ThreadedRenderer_createHardwareBitmapFromRenderNode( // Continue I guess? } sk_sp bitmap = Bitmap::createFrom(buffer); + if (!bitmap.get()) { + ALOGW("Failed to create hardware bitmap from graphic buffer"); + return nullptr; + } return createBitmap(env, bitmap.release(), android::bitmap::kBitmapCreateFlag_Mutable); }