From 60e957d071f9ff4e41cf93088aaf18fcbe2dfa92 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 21 Apr 2004 07:19:24 +0000 Subject: gthread-jni.c (maybe_rethrow): Explicitly malloc and free buf. 2004-04-21 Mark Wielaard * native/jni/gtk-peer/gthread-jni.c (maybe_rethrow): Explicitly malloc and free buf. From-SVN: r80948 --- libjava/ChangeLog | 5 ++++ libjava/jni/gtk-peer/gthread-jni.c | 48 ++++++++++++++++++++++++-------------- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 6a71bf8..4b23a1f 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,8 @@ +2004-04-21 Mark Wielaard + + * native/jni/gtk-peer/gthread-jni.c (maybe_rethrow): Explicitly + malloc and free buf. + 2004-04-21 Dalibor Topic * javax/naming/AuthenticationException.java, diff --git a/libjava/jni/gtk-peer/gthread-jni.c b/libjava/jni/gtk-peer/gthread-jni.c index cd37fe1..b21a80c 100644 --- a/libjava/jni/gtk-peer/gthread-jni.c +++ b/libjava/jni/gtk-peer/gthread-jni.c @@ -91,28 +91,40 @@ JavaVM *gdk_vm; static void maybe_rethrow(JNIEnv *gdk_env, char *message, char *file, int line) { jthrowable cause; - /* rethrow if an exception happened */ - if ((cause = (*gdk_env)->ExceptionOccurred(gdk_env)) != NULL) { jstring jmessage; - jclass obj_class; + jclass obj_class; jobject obj; jmethodID ctor; - - /* allocate local message in Java */ - int len = strlen(message) + strlen(file) + 25; - char buf[ len ]; - bzero(buf, len); - sprintf(buf, "%s (at %s:%d)", message, file, line); - jmessage = (*gdk_env)->NewStringUTF(gdk_env, buf); + int len; + char *buf; + + /* rethrow if an exception happened */ + if ((cause = (*gdk_env)->ExceptionOccurred(gdk_env)) != NULL) + { + + /* allocate local message in Java */ + len = strlen(message) + strlen(file) + 25; + buf = (char *) malloc(len); + if (buf != NULL) + { + bzero(buf, len); + sprintf(buf, "%s (at %s:%d)", message, file, line); + jmessage = (*gdk_env)->NewStringUTF(gdk_env, buf); + free(buf); + } + else + jmessage = NULL; - /* create RuntimeException wrapper object */ - obj_class = (*gdk_env)->FindClass (gdk_env, "java/lang/RuntimeException"); - ctor = (*gdk_env)->GetMethodID(gdk_env, obj_class, "", "(Ljava/langString;Ljava/lang/Throwable)V"); - obj = (*gdk_env)->NewObject (gdk_env, obj_class, ctor, jmessage, cause); - - /* throw it */ - (*gdk_env)->Throw(gdk_env, (jthrowable)obj); - } + /* create RuntimeException wrapper object */ + obj_class = (*gdk_env)->FindClass (gdk_env, + "java/lang/RuntimeException"); + ctor = (*gdk_env)->GetMethodID(gdk_env, obj_class, "", + "(Ljava/langString;Ljava/lang/Throwable)V"); + obj = (*gdk_env)->NewObject (gdk_env, obj_class, ctor, jmessage, cause); + + /* throw it */ + (*gdk_env)->Throw(gdk_env, (jthrowable)obj); + } } /* This macro is used to include a source location in the exception message */ -- cgit v1.1