Uniformly check JNI versions everywhere we use them.

Also fix JNI GetEnv logging.

Change-Id: Id2a5df4cb2e6572675945f911bfcbe17ba7a2abf
diff --git a/src/jni_internal.cc b/src/jni_internal.cc
index 8da208f..887fcb4 100644
--- a/src/jni_internal.cc
+++ b/src/jni_internal.cc
@@ -85,6 +85,11 @@
   return reinterpret_cast<jweak>(ref);
 }
 
+static bool IsBadJniVersion(int version) {
+  // We don't support JNI_VERSION_1_1. These are the only other valid versions.
+  return version != JNI_VERSION_1_2 && version != JNI_VERSION_1_4 && version != JNI_VERSION_1_6;
+}
+
 static void CheckMethodArguments(AbstractMethod* m, JValue* args)
     SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
   MethodHelper mh(m);
@@ -377,10 +382,11 @@
   const char* thread_name = NULL;
   jobject thread_group = NULL;
   if (args != NULL) {
-    if (args->version < JNI_VERSION_1_2) {
-      LOG(WARNING) << "Failed to AttachCurrentThread due to insufficent version "
-                   << std::hex << args->version << " < JNI_VERSION_1_2(" << JNI_VERSION_1_2 << ")";
-      return JNI_ERR;
+    if (IsBadJniVersion(args->version)) {
+      LOG(ERROR) << "Bad JNI version passed to "
+                 << (as_daemon ? "AttachCurrentThreadAsDaemon" : "AttachCurrentThread") << ": "
+                 << args->version;
+      return JNI_EVERSION;
     }
     thread_name = args->name;
     thread_group = args->group;
@@ -2555,7 +2561,8 @@
 
 extern "C" jint JNI_CreateJavaVM(JavaVM** p_vm, void** p_env, void* vm_args) {
   const JavaVMInitArgs* args = static_cast<JavaVMInitArgs*>(vm_args);
-  if (args->version < JNI_VERSION_1_2) {
+  if (IsBadJniVersion(args->version)) {
+    LOG(ERROR) << "Bad JNI version passed to CreateJavaVM: " << args->version;
     return JNI_EVERSION;
   }
   Runtime::Options options;
@@ -2626,7 +2633,8 @@
   }
 
   static jint GetEnv(JavaVM* vm, void** env, jint version) {
-    if (version < JNI_VERSION_1_1 || version > JNI_VERSION_1_6) {
+    if (IsBadJniVersion(version)) {
+      LOG(ERROR) << "Bad JNI version passed to GetEnv: " << version;
       return JNI_EVERSION;
     }
     if (vm == NULL || env == NULL) {
@@ -2833,11 +2841,8 @@
 
     self->SetClassLoaderOverride(old_class_loader);
 
-    if (version != JNI_VERSION_1_2 &&
-    version != JNI_VERSION_1_4 &&
-    version != JNI_VERSION_1_6) {
-      LOG(WARNING) << "JNI_OnLoad in \"" << path << "\" returned "
-                   << "bad version: " << version;
+    if (IsBadJniVersion(version)) {
+      LOG(ERROR) << "Bad JNI version returned from JNI_OnLoad in \"" << path << "\": " << version;
       // It's unwise to call dlclose() here, but we can mark it
       // as bad and ensure that future load attempts will fail.
       // We don't know how far JNI_OnLoad got, so there could