8210242: vmTestbase/nsk/stress/jni/jnistress001.java crashes with EXCEPTION_ACCESS_VIOLATION on windows-x86
Non-NUL-terminated string was passed to %s - use %.*s to specify the actual length. Reviewed-by: lfoltan, hseigel
This commit is contained in:
parent
589b596bec
commit
3837f1abc1
test/hotspot/jtreg/vmTestbase/nsk/stress/jni
@ -21,6 +21,16 @@
|
|||||||
* questions.
|
* questions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
// checked malloc to trap OOM conditions
|
||||||
|
static void* c_malloc(JNIEnv* env, size_t size) {
|
||||||
|
void* ret = malloc(size);
|
||||||
|
if (ret == NULL)
|
||||||
|
env->FatalError("malloc failed");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
// Asserts every exception as fatal one
|
// Asserts every exception as fatal one
|
||||||
#define CE {\
|
#define CE {\
|
||||||
if (env->ExceptionOccurred())\
|
if (env->ExceptionOccurred())\
|
||||||
|
@ -66,11 +66,11 @@ Java_nsk_stress_jni_JNIter001_jnistress (JNIEnv *env, jobject jobj, jstring jstr
|
|||||||
|
|
||||||
env->MonitorEnter(jobj); CE
|
env->MonitorEnter(jobj); CE
|
||||||
if (!allocs) {
|
if (!allocs) {
|
||||||
element = (CHAR_ARRAY *)malloc(sizeof(CHAR_ARRAY));
|
element = (CHAR_ARRAY *)c_malloc(env, sizeof(CHAR_ARRAY));
|
||||||
element->str = (const char **)malloc(nstr*sizeof(const char *));
|
element->str = (const char **)c_malloc(env, nstr*sizeof(const char *));
|
||||||
element->checkstr = (char **)malloc(nstr*sizeof(char *));
|
element->checkstr = (char **)c_malloc(env, nstr*sizeof(char *));
|
||||||
for (j=0;j<nstr;j++)
|
for (j=0;j<nstr;j++)
|
||||||
element->checkstr[j] = (char *)malloc(DIGESTLENGTH*sizeof(char));
|
element->checkstr[j] = (char *)c_malloc(env, DIGESTLENGTH*sizeof(char));
|
||||||
}
|
}
|
||||||
for(j=0;j<DIGESTLENGTH;j++) {
|
for(j=0;j<DIGESTLENGTH;j++) {
|
||||||
digest[j]=0;
|
digest[j]=0;
|
||||||
@ -148,6 +148,7 @@ Java_nsk_stress_jni_JNIter001_jnistress1(JNIEnv *env, jobject jobj, jstring jstr
|
|||||||
static long len=0;
|
static long len=0;
|
||||||
static unsigned int equal=1;
|
static unsigned int equal=1;
|
||||||
char *elem;
|
char *elem;
|
||||||
|
int elem_len = -1;
|
||||||
|
|
||||||
const char *clsName = "nsk/stress/jni/JNIter001";
|
const char *clsName = "nsk/stress/jni/JNIter001";
|
||||||
const char *name="setpass";
|
const char *name="setpass";
|
||||||
@ -160,30 +161,32 @@ Java_nsk_stress_jni_JNIter001_jnistress1(JNIEnv *env, jobject jobj, jstring jstr
|
|||||||
|
|
||||||
env->MonitorEnter(jobj); CE
|
env->MonitorEnter(jobj); CE
|
||||||
if (!index) {
|
if (!index) {
|
||||||
javachars = (JCHAR_ARRAY *)malloc(sizeof(JCHAR_ARRAY));
|
javachars = (JCHAR_ARRAY *)c_malloc(env, sizeof(JCHAR_ARRAY));
|
||||||
javachars->str = (const jchar **)malloc(nstr*sizeof(const jchar *));
|
javachars->str = (const jchar **)c_malloc(env, nstr*sizeof(const jchar *));
|
||||||
javachars->checkstr = (char **)malloc(nstr*sizeof(char *));
|
javachars->checkstr = (char **)c_malloc(env, nstr*sizeof(char *));
|
||||||
javachars->size = (int *)malloc(nstr*sizeof(int));
|
javachars->size = (int *)c_malloc(env, nstr*sizeof(int));
|
||||||
for (j=0;j<nstr;j++)
|
for (j=0;j<nstr;j++)
|
||||||
javachars->checkstr[j] = (char *)malloc(DIGESTLENGTH*sizeof(char));
|
javachars->checkstr[j] = (char *)c_malloc(env, DIGESTLENGTH*sizeof(char));
|
||||||
}
|
}
|
||||||
for(j=0;j<DIGESTLENGTH;j++) {
|
for(j=0;j<DIGESTLENGTH;j++) {
|
||||||
digest[j]=0;
|
digest[j]=0;
|
||||||
}
|
}
|
||||||
javachars->str[index] = env->GetStringChars(jstr,0); CE
|
javachars->str[index] = env->GetStringChars(jstr,0); CE
|
||||||
javachars->size[index] = env->GetStringUTFLength(jstr); CE
|
javachars->size[index] = env->GetStringUTFLength(jstr); CE
|
||||||
len += javachars->size[index];
|
elem_len = javachars->size[index];
|
||||||
elem = (char*) malloc(javachars->size[index]*sizeof(char));
|
len += elem_len;
|
||||||
for (j=0; j < javachars->size[index]; j++) {
|
elem = (char*) c_malloc(env, elem_len*sizeof(char));
|
||||||
|
for (j=0; j < elem_len; j++) {
|
||||||
elem[j] = (char) javachars->str[index][j];
|
elem[j] = (char) javachars->str[index][j];
|
||||||
}
|
}
|
||||||
|
|
||||||
//memcpy(digest, elem, javachars->size[index]);
|
//memcpy(digest, elem, javachars->size[index]);
|
||||||
for(j=0;j<javachars->size[index]; j++) {
|
for(j=0;j<elem_len; j++) {
|
||||||
digest[j % DIGESTLENGTH]+=elem[j];
|
digest[j % DIGESTLENGTH]+=elem[j];
|
||||||
}
|
}
|
||||||
memcpy(javachars->checkstr[index++],digest,DIGESTLENGTH);
|
memcpy(javachars->checkstr[index++],digest,DIGESTLENGTH);
|
||||||
if (index%printperiod==0) {
|
if (index%printperiod==0) {
|
||||||
printf("Check string sum for thread %s is ",elem);
|
printf("Check string sum for thread %.*s is ", elem_len, elem);
|
||||||
for (j=0;j<DIGESTLENGTH;j++)
|
for (j=0;j<DIGESTLENGTH;j++)
|
||||||
printf("%02x", digest[j]);
|
printf("%02x", digest[j]);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
@ -191,9 +194,9 @@ Java_nsk_stress_jni_JNIter001_jnistress1(JNIEnv *env, jobject jobj, jstring jstr
|
|||||||
free(elem);
|
free(elem);
|
||||||
if (index==nstr) {
|
if (index==nstr) {
|
||||||
printf("JNI Unicode strings memory=%ld\n",len);
|
printf("JNI Unicode strings memory=%ld\n",len);
|
||||||
tmpstr=env->NewString(javachars->str[index-1],javachars->size[index-1]); CE
|
tmpstr=env->NewString(javachars->str[index-1],elem_len); CE
|
||||||
for (j=0; j<nstr; j++) {
|
for (j=0; j<nstr; j++) {
|
||||||
elem = (char*) malloc(javachars->size[j]*sizeof(char));
|
elem = (char*) c_malloc(env, javachars->size[j]*sizeof(char));
|
||||||
for (i=0; i < javachars->size[j]; i++) {
|
for (i=0; i < javachars->size[j]; i++) {
|
||||||
elem[i] = (char) javachars->str[j][i];
|
elem[i] = (char) javachars->str[j][i];
|
||||||
}
|
}
|
||||||
@ -237,7 +240,7 @@ Java_nsk_stress_jni_JNIter001_jnistress1(JNIEnv *env, jobject jobj, jstring jstr
|
|||||||
return(tmpstr);
|
return(tmpstr);
|
||||||
}
|
}
|
||||||
env->MonitorExit(jobj); CE
|
env->MonitorExit(jobj); CE
|
||||||
return(env->NewString(javachars->str[index-1],javachars->size[index-1]));
|
return(env->NewString(javachars->str[index-1],elem_len));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user