United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: 8004344 A crash in ToolkitErrorHandler() in XlibWrapper.c
8004344 : A crash in ToolkitErrorHandler() in XlibWrapper.c

Details
Type:
Bug
Submit Date:
2012-12-04
Status:
Resolved
Updated Date:
2013-04-16
Project Name:
JDK
Resolved Date:
2012-12-04
Component:
client-libs
OS:
Sub-Component:
java.awt
CPU:
Priority:
P4
Resolution:
Fixed
Affected Versions:
8
Fixed Versions:
8

Related Reports
Backport:

Sub Tasks

Description
http://mail.openjdk.java.net/pipermail/awt-dev/2012-November/003928.html
(from Andrew Haley aph@redhat.com)

This one was reported by the LibreOffice folks.

We don't check the return argument of JNU_GetEnv() in ToolkitErrorHandler:


static int ToolkitErrorHandler(Display * dpy, XErrorEvent * event) {
    if (jvm != NULL) {
        JNIEnv * env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
        return JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit", "globalErrorHandler", "(JJ)I",
                                          ptr_to_jlong(dpy), ptr_to_jlong(event)).i;
    } else {
        return 0;
    }
}


JNU_GetEnv() will return NULL if this thread is not a Java thread, so
we crash.  This will happen if SWT is loaded in an application that
uses X itself in some threads.

The patch is pretty trivial, we just have to check env before using it:


--- jdk/src/solaris/native/sun/xawt/XlibWrapper.c~	2012-10-11 17:20:54.000000000 +0100
+++ jdk/src/solaris/native/sun/xawt/XlibWrapper.c	2012-11-30 10:52:19.980613972 +0000
@@ -1260,13 +1260,15 @@

 JavaVM* jvm = NULL;
 static int ToolkitErrorHandler(Display * dpy, XErrorEvent * event) {
+    JNIEnv * env;
     if (jvm != NULL) {
-        JNIEnv * env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
-        return JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit", "globalErrorHandler", "(JJ)I",
-                                          ptr_to_jlong(dpy), ptr_to_jlong(event)).i;
-    } else {
-        return 0;
+	env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
+	if (env) {
+	    return JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit", "globalErrorHandler", "(JJ)I",
+					      ptr_to_jlong(dpy), ptr_to_jlong(event)).i;
+	}
     }
+    return 0;
 }

 /*
                                    

Comments
URL:   http://hg.openjdk.java.net/jdk8/jdk8/jdk/rev/ea20c9388d90
User:  lana
Date:  2012-12-11 19:52:58 +0000

                                     
2012-12-11
URL:   http://hg.openjdk.java.net/jdk8/awt/jdk/rev/ea20c9388d90
User:  aph
Date:  2012-12-04 14:11:56 +0000

                                     
2012-12-04



Hardware and Software, Engineered to Work Together