Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 489d49d3 authored by Ryan Mitchell's avatar Ryan Mitchell
Browse files

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
parent 3b5e4d29
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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,13 +1294,19 @@ 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));
  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,
                            jlong dst_theme_ptr, jlong src_asset_manager_ptr, jlong src_theme_ptr) {