strlen and wcslen are bound as int, but C returns size_t
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 52/100
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- Java
- Stelle
- 202
- Fork
- 206
- Merge medio
- 16h 56m
- PR unite (30g)
- 110
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di 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 *`Forse già presa @GreenFuze l’ha presa 3 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
eclipse-platform/eclipse.platform.swt#3665 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
eclipse-platform/eclipse.platform.swt#3546 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
eclipse-platform/eclipse.platform.swt#3428 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 75/100
eclipse-platform/eclipse.platform.swt#3336 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
eclipse-platform/eclipse.platform.swt#3718 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di eclipse-platform/eclipse.platform.swt
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
apache/rocketmq-dashboard#6872 ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
ADORSYS-GIS/token-status-link#168 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
ADORSYS-GIS/keycloak-oid4vp-plugin#232 ·
I maintainer di solito rispondono entro 2 giorni
-
Wrong link to test resultsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 2 giorni
-
docs(site): Mermaid edge-label contrast on Architecture and a table header on How it comparesApertadocumentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
devops-thiago/ThrillhouseBot#1132 ·
I maintainer di solito rispondono entro 1 giorno