# HG changeset patch # User jfdenise # Date 1436792717 -3600 # Node ID 3b32c5ff56e4722a909837f839a5b30d86c809ee # Parent 7a5da9274448ad92265c0b9430ad123a101e795e 8130344: assert(handle != __null) failed: JNI handle should not be null' in jni_GetLongArrayElements Summary: Check JNI NewArray for NULL value Reviewed-by: lfoltan, alanb, dholmes diff -r 7a5da9274448 -r 3b32c5ff56e4 jdk/src/java.base/share/classes/jdk/internal/jimage/ImageNativeSubstrate.java --- a/jdk/src/java.base/share/classes/jdk/internal/jimage/ImageNativeSubstrate.java Thu Jul 09 22:46:18 2015 -0700 +++ b/jdk/src/java.base/share/classes/jdk/internal/jimage/ImageNativeSubstrate.java Mon Jul 13 14:05:17 2015 +0100 @@ -112,7 +112,12 @@ @Override public byte[] getStringBytes(int offset) { - return getStringBytes(id, offset); + byte[] ret = getStringBytes(id, offset); + if (ret == null) { + throw new OutOfMemoryError("Error accessing array at offset " + + offset); + } + return ret; } @Override diff -r 7a5da9274448 -r 3b32c5ff56e4 jdk/src/java.base/share/native/libjava/Image.c --- a/jdk/src/java.base/share/native/libjava/Image.c Thu Jul 09 22:46:18 2015 -0700 +++ b/jdk/src/java.base/share/native/libjava/Image.c Mon Jul 13 14:05:17 2015 +0100 @@ -104,6 +104,9 @@ size = strlen(data); // Allocate byte array. byteArray = (*env)->NewByteArray(env, (jsize) size); + if (byteArray == NULL) { + return NULL; + } // Get array base address. rawBytes = (*env)->GetByteArrayElements(env, byteArray, NULL); // Copy bytes from image string table. @@ -122,6 +125,9 @@ jlong* ret; attributes = (*env)->NewLongArray(env, JVM_ImageGetAttributesCount(env)); + if (attributes == NULL) { + return NULL; + } // Get base address for jlong array. rawAttributes = (*env)->GetLongArrayElements(env, attributes, NULL); ret = JVM_ImageGetAttributes(env, rawAttributes, id, offset); @@ -143,6 +149,9 @@ count = JVM_ImageGetAttributesCount(env); attributes = (*env)->NewLongArray(env, JVM_ImageGetAttributesCount(env)); + if (attributes == NULL) { + return NULL; + } // Get base address for jlong array. rawAttributes = (*env)->GetLongArrayElements(env, attributes, NULL); size = (*env)->GetArrayLength(env, utf8); @@ -165,6 +174,9 @@ length = JVM_ImageAttributeOffsetsLength(env, id); offsets = (*env)->NewIntArray(env, length); + if (offsets == NULL) { + return NULL; + } // Get base address of result. rawOffsets = (*env)->GetIntArrayElements(env, offsets, NULL); ret = JVM_ImageAttributeOffsets(env, rawOffsets, length, id);