summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorMartin Kahlert <martin.kahlert@infineon.com>2002-02-08 14:18:24 +0000
committerTom Tromey <tromey@gcc.gnu.org>2002-02-08 14:18:24 +0000
commitd3ae0d490d2abeb1f06966a99dad2d3ac0ac0c6c (patch)
treed5ffecfa0b304e63a02d6498298f2274abb68b2c /libjava
parente7d7a7a734759ee8189dfcd780a6d659af115f80 (diff)
downloadgcc-d3ae0d490d2abeb1f06966a99dad2d3ac0ac0c6c.tar.gz
jni.cc (_Jv_JNI_NewLocalRef): Make sure, that NULL frame is not dereferenced.
2002-02-08 Martin Kahlert <martin.kahlert@infineon.com> * jni.cc (_Jv_JNI_NewLocalRef): Make sure, that NULL frame is not dereferenced. (_Jv_JNI_AttachCurrentThread): Produce full featured env->locals frame. From-SVN: r49615
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog7
-rw-r--r--libjava/jni.cc13
2 files changed, 18 insertions, 2 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index baa56db5e3b..cd13bb359fa 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,10 @@
+2002-02-08 Martin Kahlert <martin.kahlert@infineon.com>
+
+ * jni.cc (_Jv_JNI_NewLocalRef): Make sure, that NULL frame is not
+ dereferenced.
+ (_Jv_JNI_AttachCurrentThread): Produce full featured env->locals
+ frame.
+
2002-02-07 Tom Tromey <tromey@redhat.com>
* java/io/natFile.cc (_access): Use __builtin_alloca.
diff --git a/libjava/jni.cc b/libjava/jni.cc
index 24ea04876d1..9ee0df4a451 100644
--- a/libjava/jni.cc
+++ b/libjava/jni.cc
@@ -1,6 +1,6 @@
// jni.cc - JNI implementation, including the jump table.
-/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation
This file is part of libgcj.
@@ -325,7 +325,7 @@ _Jv_JNI_NewLocalRef (JNIEnv *env, jobject obj)
// If we found a slot, or if the frame we just searched is the
// mark frame, then we are done.
- if (done || frame->marker != MARK_NONE)
+ if (done || frame == NULL || frame->marker != MARK_NONE)
break;
}
@@ -2131,6 +2131,15 @@ _Jv_JNI_AttachCurrentThread (JavaVM *, jstring name, void **penv, void *args)
_Jv_Free (env);
return JNI_ERR;
}
+
+ env->locals->marker = MARK_SYSTEM;
+ env->locals->size = FRAME_SIZE;
+ env->locals->next = env->locals;
+ env->locals = NULL;
+
+ for (int i = 0; i < env->locals->size; ++i)
+ env->locals->vec[i] = NULL;
+
*penv = reinterpret_cast<void *> (env);
// This thread might already be a Java thread -- this function might