strlen and wcslen are bound as int, but C returns size_t
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 52/100
Línea de trabajo
Start with the declarations and native stubs named in the issue: C.java and c.c for strlen, plus OS.java and os.c for wcslen. Trace the affected call sites in Font.java and Display.java, and compare with TextLayout.java's cast of g_utf16_strlen. Done means the Java return types and regenerated stubs preserve size_t appropriately, and call sites handle the wider result; the issue reports no tests or build run.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Two C entry points return a size_t and are declared int on the Java side. The stub casts the result down, so the C compiler has nothing to warn about, and nothing anywhere compares the Java declaration with the C one.
/* bundles/org.eclipse.swt/Eclipse SWT PI/common/library/c.c:358 */
rc = (jint)strlen((char *)arg0);
/* string.h */ size_t strlen(const char *);
/* bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os.c:9855 */
rc = (jint)wcslen((const wchar_t *)arg0);
/* wchar.h */ size_t wcslen(const wchar_t *);
The Java declarations:
/* Eclipse SWT PI/common/org/eclipse/swt/internal/C.java:144 */ public static final native int strlen (long s);
/* Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/OS.java:4554 */ public static final native int wcslen (long string);
What it can cause
On LP64 size_t is 64-bit and jint is 32-bit, so the top 32 bits are dropped unconditionally. For a string of 2 GiB or more the returned length is wrong — and wrong in the worst way, because the cast makes it a plausible small number rather than an obvious failure.
Every call site uses the value directly as a length:
/* Eclipse SWT/gtk/org/eclipse/swt/graphics/Font.java:189 */ int length = C.strlen(family);
/* Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java:3424 */ int length = OS.wcslen (sharedData);
I have not observed a failure and nothing was built or run. Whether a string that long reaches these calls is a question about SWT's own use, not about the declarations.
Suggested fix
SWT already models size_t as Java long everywhere else in the same file. C.java declares eighteen memmove overloads and memset, and every one takes a long annotated cast=(size_t):
/* C.java:141 */ public static final native long memset (long buffer, int c, long num); /* @param num cast=(size_t) */
strlen and wcslen are the only places size_t appears as a return, and the only two that use int. The repair would be to make them look like the rest — declare long and regenerate the stubs.
Call sites assign to int length, so each would need a cast or a wider local. TextLayout already writes one for the same kind of value:
/* Eclipse SWT/gtk/org/eclipse/swt/graphics/TextLayout.java:655 */
lineEnd = (int)OS.g_utf16_strlen(ptr, -1);
Provenance
Reported as part of ongoing research into cross-language boundaries. Every line above was checked against master on 2026-08-23. No runtime observation; nothing was built or run.
wcslen is Win32-only, where size_t is 64-bit under LLP64 as well, so the narrowing holds on both data models.
- Lenguaje dominante
- Java
- Estrellas
- 202
- Forks
- 206
- Merge medio
- 14 h 7 min
- PR fusionados (30 d)
- 103
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 Un pull request vinculado a esta issue está abierto o ya se fusionó. 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
-
Status: Pending Review Type: Feature Request
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
OpenRefine/OpenRefine#8019 ·
Los mantenedores suelen responder en 1 día
-
`timer` rule rejects dates the engine acceptsPosiblemente ocupada @MFA-G la tomó hoy. Abiertobug ready
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
camunda/bpmnlint-plugin-camunda-compat#281 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
status: waiting-for-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
bug
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