User32: SetCursorPos is declared (long, long), but Windows declares (int, int)
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 72/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- java
- Bereich
- backend, operating-systems
Rechercherichtung
Beginne bei der Deklaration von SetCursorPos in contrib/platform/src/com/sun/jna/platform/win32/User32.java und vergleiche sie mit der im Issue zitierten Win32-Signatur. Prüfe verwandte Aufrufer und User32Test.testSetCursorPos, um die Kompatibilität und die vorhandene Testabdeckung zu verstehen. Die Arbeit ist abgeschlossen, wenn das Binding die richtigen Koordinatentypen verwendet, eine etwaige Kompatibilitätsentscheidung berücksichtigt wird und der Test das Verhalten abdeckt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
User32.SetCursorPos takes two Java longs. Win32 declares both coordinates as int.
// contrib/platform/src/com/sun/jna/platform/win32/User32.java:2329
boolean SetCursorPos(long x, long y);
// um/WinUser.h (Windows SDK 10.0.28000)
WINUSERAPI
BOOL
WINAPI
SetCursorPos(
_In_ int X,
_In_ int Y);
What it can cause
On 64-bit Windows nothing goes wrong: each argument travels in a register, and SetCursorPos reads its low 32 bits. On 32-bit Windows the arguments go on the stack, and each long takes 8 bytes. SetCursorPos reads X from the low half of x and Y from the high half of x, which is 0 for any on-screen x, so the cursor lands at (x, 0). Because the function is stdcall, it also pops 8 bytes where 16 were pushed. I don't have 32-bit Windows to run this; it follows from the two declarations. User32Test.testSetCursorPos passes on 64-bit, which is consistent with it.
Fix
boolean SetCursorPos(int x, int y);. Changing the signature breaks callers compiled against the long version, so adding the int overload and deprecating the long one may be gentler. Happy to send a PR for whichever you prefer.
How this was found
By a research tool that compares each native declaration against the C declaration of the function it binds. Nothing was built or executed; every file quoted is in this repository at 5.19.1, and unchanged on master.
- Vorherrschende Sprache
- Java
- Sterne
- 8.9k
- Forks
- 1.7k
- Ø Merge
- 1 T. 13 Std.
- Gemergte PRs (30 T.)
- 1
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus java-native-access/jna
-
MacFileUtils: FSPathMakeRef passes an int where the C function takes its FSRef output pointerEvtl. vergeben @VelpulaGangavardhan hat das vor 4 Tagen übernommen. Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 79/100
java-native-access/jna#1746 · 1 Kommentar ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
java-native-access/jna#1747 · 1 Kommentar ·
-
`Native.typeOptions` never releases library interfaces, leaking classloadersEvtl. vergeben @curforever hat das vor 17 Tagen übernommen. Offen
Schwierigkeit 4/5 1-2 Tage Anfängerfreundlichkeit 48/100
java-native-access/jna#1742 ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 66/100
java-native-access/jna#1738 ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
java-native-access/jna#1736 ·
Alle Issues in java-native-access/jna
Ähnliche Issues
-
[BUG] micronaut-serde-oracle-jdbc-json brings a second OJDBC driver onto the runtime classpathEvtl. vergeben @ZARAYACH hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
micronaut-projects/micronaut-serialization#1494 · 4 Kommentare ·
Maintainer antworten meist innerhalb von 2 Tagen
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 73/100
Maintainer antworten meist innerhalb von 2 Tagen
-
code-health feature/sync OS/Android QA/Test-Plan-Specified QA/Yes
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
brave/brave-browser#60327 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Type: Bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
it-at-m/raumreservierung#383 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
aws/context-ontology-accelerator#325 ·
Maintainer antworten meist innerhalb von 1 Tag