From 489d49d32512b51d717de714c64c8b903d431f5e Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Mon, 14 Jun 2021 09:13:58 -0700 Subject: Fix NativeThemeRebase null abort ReleasePrimitiveArrayCritical will fail if the java object being released is null. The array may be null if `style_count` is 0. Do not call ReleasePrimitiveArrayCritical on the array if it is null. Bug: 190927589 Test: forest Change-Id: I432668f71137908838ebc3a47d834c1da3c67777 --- core/jni/android_util_AssetManager.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp index 73e7d86e8279..e93b00d7b148 100644 --- a/core/jni/android_util_AssetManager.cpp +++ b/core/jni/android_util_AssetManager.cpp @@ -1282,6 +1282,8 @@ static void NativeThemeRebase(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlong th if (style_id_args == nullptr) { return; } + } else { + CHECK(style_count == 0) << "style_ids is null while style_count is non-zero"; } jboolean* force_args = nullptr; @@ -1292,12 +1294,18 @@ static void NativeThemeRebase(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlong th env->ReleasePrimitiveArrayCritical(style_ids, style_id_args, JNI_ABORT); return; } + } else { + CHECK(style_count == 0) << "force is null while style_count is non-zero"; } auto theme = reinterpret_cast(theme_ptr); theme->Rebase(&(*assetmanager), style_id_args, force_args, static_cast(style_count)); - env->ReleasePrimitiveArrayCritical(style_ids, style_id_args, JNI_ABORT); - env->ReleasePrimitiveArrayCritical(force, force_args, JNI_ABORT); + if (style_ids != nullptr) { + env->ReleasePrimitiveArrayCritical(style_ids, style_id_args, JNI_ABORT); + } + if (force != nullptr) { + env->ReleasePrimitiveArrayCritical(force, force_args, JNI_ABORT); + } } static void NativeThemeCopy(JNIEnv* env, jclass /*clazz*/, jlong dst_asset_manager_ptr, -- cgit v1.2.3-59-g8ed1b