summaryrefslogtreecommitdiff
path: root/core/jni
diff options
context:
space:
mode:
authorRyan Mitchell <rtmitchell@google.com>2021-06-14 09:13:58 -0700
committerRyan Mitchell <rtmitchell@google.com>2021-06-14 09:22:23 -0700
commit489d49d32512b51d717de714c64c8b903d431f5e (patch)
tree8e7fc05a951b560ea54eff064c08e16550a81bb5 /core/jni
parent3b5e4d293679b0a90a5ff3cba431207af259c79b (diff)
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
Diffstat (limited to 'core/jni')
-rw-r--r--core/jni/android_util_AssetManager.cpp12
1 files 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*>(theme_ptr);
theme->Rebase(&(*assetmanager), style_id_args, force_args, static_cast<size_t>(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,