Merge "Prevent NULL dereference g_impl not initialized"
diff --git a/JniInvocation.c b/JniInvocation.c
index 222ec6a..9cfb084 100644
--- a/JniInvocation.c
+++ b/JniInvocation.c
@@ -87,14 +87,20 @@
//
jint JNI_GetDefaultJavaVMInitArgs(void* vmargs) {
+ ALOG_ALWAYS_FATAL_IF(NULL == g_impl.JNI_GetDefaultJavaVMInitArgs, "Runtime library not loaded.");
return g_impl.JNI_GetDefaultJavaVMInitArgs(vmargs);
}
jint JNI_CreateJavaVM(JavaVM** p_vm, JNIEnv** p_env, void* vm_args) {
+ ALOG_ALWAYS_FATAL_IF(NULL == g_impl.JNI_CreateJavaVM, "Runtime library not loaded.");
return g_impl.JNI_CreateJavaVM(p_vm, p_env, vm_args);
}
jint JNI_GetCreatedJavaVMs(JavaVM** vms, jsize size, jsize* vm_count) {
+ if (NULL == g_impl.JNI_GetCreatedJavaVMs) {
+ *vm_count = 0;
+ return JNI_OK;
+ }
return g_impl.JNI_GetCreatedJavaVMs(vms, size, vm_count);
}
diff --git a/tests/Android.bp b/tests/Android.bp
index 9ac1260..89dbaf9 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -41,9 +41,6 @@
// Enable warning of converting ints to void*.
"-Wint-to-void-pointer-cast",
- // Enable warning of wrong unused annotations.
- "-Wused-but-marked-unused",
-
// Enable warning for deprecated language features.
"-Wdeprecated",
diff --git a/tests/JniInvocation_test.cpp b/tests/JniInvocation_test.cpp
index cc18032..783eddf 100644
--- a/tests/JniInvocation_test.cpp
+++ b/tests/JniInvocation_test.cpp
@@ -17,8 +17,8 @@
#include "../JniInvocation-priv.h"
#include <gtest/gtest.h>
+#include <jni.h>
-#include "string.h"
static const char* kDefaultJniInvocationLibrary = "libart.so";
static const char* kTestNonNull = "libartd.so";
@@ -51,3 +51,21 @@
result = JniInvocationGetLibraryWith(nullptr, false, nullptr);
EXPECT_STREQ(result, kDefaultJniInvocationLibrary);
}
+
+TEST(JNIInvocation, GetDefaultJavaVMInitArgsBeforeInit) {
+ EXPECT_DEATH(JNI_GetDefaultJavaVMInitArgs(nullptr), "Runtime library not loaded.");
+}
+
+TEST(JNIInvocation, CreateJavaVMBeforeInit) {
+ JavaVM *vm;
+ JNIEnv *env;
+ EXPECT_DEATH(JNI_CreateJavaVM(&vm, &env, nullptr), "Runtime library not loaded.");
+}
+
+TEST(JNIInvocation, GetCreatedJavaVMsBeforeInit) {
+ jsize vm_count;
+ JavaVM *vm;
+ int status = JNI_GetCreatedJavaVMs(&vm, 1, &vm_count);
+ EXPECT_EQ(status, JNI_OK);
+ EXPECT_EQ(vm_count, 0);
+}