Comment 19 for bug 789123

Revision history for this message
Daniel Manrique (roadmr) wrote :

Here's some analysis of source code for swt-gtk:

The source file that's at the top of the Java stack is:

org/eclipse/swt/widgets/MenuItem.java

The offending method is

public void setText(String string)

After a bunch of Java code, the call that fails is:

int /*long*/ oldPtr = OS.GTK_ACCEL_LABEL_GET_ACCEL_STRING (label); //THIS ONE
OS.GTK_ACCEL_LABEL_SET_ACCEL_STRING (label, ptr); // We don't reach this line

From code a bit further up it looks like label is a label widget (clearly, heh).

This macro is defined in the C files that interface with GTK, under a section "Field accesors":

#define GTK_ACCEL_LABEL_GET_ACCEL_STRING(arg0) (arg0)->accel_string

Looks like what it does is fetch the accel_string member of the struct passed as a parameter (a GtkWidget is essentially a struct). To someone who knows a bit more about Java->C interfacing and/or GTK, it might be clear under which circumstances the call GtkAccelLabel->accel_string might segfault. GtkAccelLabel comes from os.c where GTK_1ACCEL_1LABEL_1GET_1ACCEL_1STRING (familiar as it appears early in the stack trace file as the name of the Problematic Frame) is defined as follows:

JNIEXPORT jintLong JNICALL OS_NATIVE(GTK_1ACCEL_1LABEL_1GET_1ACCEL_1STRING)
    (JNIEnv *env, jclass that, jintLong arg0)
{
    jintLong rc = 0;
    OS_NATIVE_ENTER(env, that, GTK_1ACCEL_1LABEL_1GET_1ACCEL_1STRING_FUNC);
    rc = (jintLong)GTK_ACCEL_LABEL_GET_ACCEL_STRING((GtkAccelLabel *)arg0);
    OS_NATIVE_EXIT(env, that, GTK_1ACCEL_1LABEL_1GET_1ACCEL_1STRING_FUNC);
    return rc;
}

So, determining the value for which an attempt to access the accel_string segfaults would yield more information.

I'll ask for some advice upstream on the Ubuntu package this stuff should be associated to, for further investigation by people more knowledgeable than me :)

---
Ubuntu Bug Squad volunteer triager
http://wiki.ubuntu.com/BugSquad