Five dynamically-loaded GTK/GDK functions are called through a wrong function-pointer type
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 72/100
Línea de trabajo
Start with the declarations at GTK4.java:426, :432, and :444 and GDK.java:1139 and :1199, then compare them with the generated stubs in gtk4.c and os.c at the cited lines. The issue says to correct the Java native signatures to match GTK/GDK and regenerate; verify the generated signatures and run relevant SWT tests or build checks. Done when all five declarations and generated calls match the cited GTK/GDK headers.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Several GTK/GDK entry points are loaded at run time and called through a function-pointer type the stub declares itself. The cast tells the compiler what the signature is, so nothing is left to check against GTK's header — and five of them disagree with it.
Three read a return value from a function GTK declares void:
/* bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/gtk4.c:1127 — gtk_color_dialog_set_title */
rc = (jlong)((jlong (CALLING_CONVENTION*)(jlong, char *))fp)(arg0, (char *)lparg1);
/* gtk/gtkcolordialog.h */ void gtk_color_dialog_set_title (GtkColorDialog *self, const char *title);
/* gtk/gtkfontdialog.h */ void gtk_font_dialog_set_modal (GtkFontDialog *self, gboolean modal);
/* gtk/gtkfontdialog.h */ void gtk_font_dialog_set_title (GtkFontDialog *self, const char *title);
Same shape at gtk4.c:1887 (gtk_font_dialog_set_modal) and gtk4.c:1909 (gtk_font_dialog_set_title).
Two more disagree about the parameters:
/* bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c:2494 */
rc = (jlong)((jlong (CALLING_CONVENTION*)(jint, jint))fp)(arg0, arg1);
/* gdk/gdktoplevellayout.h */ GdkToplevelLayout *gdk_toplevel_layout_new (void);
/* os.c:2514 */
rc = (jboolean)((jboolean (CALLING_CONVENTION*)(GdkToplevel *, jint, jint, GdkToplevelLayout *))fp)((GdkToplevel *)arg0, arg1, arg2, (GdkToplevelLayout *)arg3);
/* gdk/gdktoplevel.h */ void gdk_toplevel_present (GdkToplevel *toplevel, GdkToplevelLayout *layout);
What it can cause
ColorDialog.java:143 and FontDialog.java:171-172 call the first three, so that path runs. Java discards the value, so nothing goes wrong today — but reading the return of a void function is undefined behaviour, and it stops being harmless the moment anything uses rc.
For the other two I could find only the native declarations in GDK.java and no caller, so I believe they are unreachable — please treat that as my reading rather than a claim. If gdk_toplevel_present were called, GDK would take its second argument, a jint here, and use it as a GdkToplevelLayout *.
No observed failure; nothing was built or run.
Fix
gtk_color_dialog_set_modal, the fourth member of the same family, is already right:
// GTK4.java:460
public static final native void gtk_color_dialog_set_modal(long self, boolean modal);
/* gtk4.c:1106 */ ((void (CALLING_CONVENTION*)(jlong, gboolean))fp)(arg0, (gboolean)arg1);
So the other three want the same change: long → void in GTK4.java at :426, :432 and :444, then regenerate. Both call sites already ignore the result.
The two GDK declarations need the arguments GDK actually takes:
// GDK.java:1139 and :1199, as they would read after the change
public static final native void gdk_toplevel_present(long toplevel, long layout);
public static final native long gdk_toplevel_layout_new();
How this was found
By a research tool that compares each Java native declaration against the C declaration of the function its generated stub actually calls — here the case where the stub declares that signature itself, so no compiler sees both ends. Every line above was re-read on master (3e3b24b4) and against the GTK 4.23.2 headers.
Edited 2026-08-21: shortened. The claim, the evidence and the line numbers are unchanged.
- Lenguaje dominante
- Java
- Estrellas
- 202
- Forks
- 206
- Merge medio
- 16 h 56 min
- PR fusionados (30 d)
- 110
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de eclipse-platform/eclipse.platform.swt
-
`SWT_AWT.initFrame` takes `(long, String)` in Java; the GTK native declares no `className` and the Cocoa native types it `const char *`Posiblemente ocupada @GreenFuze la tomó hace 2 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
eclipse-platform/eclipse.platform.swt#3665 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
eclipse-platform/eclipse.platform.swt#3546 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
eclipse-platform/eclipse.platform.swt#3428 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 75/100
eclipse-platform/eclipse.platform.swt#3336 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
eclipse-platform/eclipse.platform.swt#3718 ·
Los mantenedores suelen responder en 1 día
Todos los issues de eclipse-platform/eclipse.platform.swt
Issues similares
-
:maddi-inspection-kotlin:test runs out of heap in a full maddi test run; exit 1 with no failing testAbiertobuild/ci front-end:kotlin
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
uwolfer/gerrit-intellij-plugin#768 ·
Los mantenedores suelen responder en 1 día
-
github_actions
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
hiero-ledger/hiero-consensus-node#27621 ·
Los mantenedores suelen responder en 1 día
-
x:knowledge/elementary x:module/practice-exercise
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100