fix: bound 32-bit syscall arg setup
- commit
- 5e664bd0caadb3bbb7dd07a6bdc29feff456f027
- author
- brice · · 2026-04-13 09:58 UTC
- parent
- c0e6605
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
2 files · +16 -18
M syscall_32bit.go +0 -18
| @@ -41,23 +41,6 @@ func (s *syscall15Args) Set(fn uintptr, ints []uintptr, floats []uintptr, r8 uin | |||
| 41 | 41 | s.a13 = ints[12] | |
| 42 | 42 | s.a14 = ints[13] | |
| 43 | 43 | s.a15 = ints[14] | |
| 44 | - | s.a16 = ints[15] | |
| 45 | - | s.a17 = ints[16] | |
| 46 | - | s.a18 = ints[17] | |
| 47 | - | s.a19 = ints[18] | |
| 48 | - | s.a20 = ints[19] | |
| 49 | - | s.a21 = ints[20] | |
| 50 | - | s.a22 = ints[21] | |
| 51 | - | s.a23 = ints[22] | |
| 52 | - | s.a24 = ints[23] | |
| 53 | - | s.a25 = ints[24] | |
| 54 | - | s.a26 = ints[25] | |
| 55 | - | s.a27 = ints[26] | |
| 56 | - | s.a28 = ints[27] | |
| 57 | - | s.a29 = ints[28] | |
| 58 | - | s.a30 = ints[29] | |
| 59 | - | s.a31 = ints[30] | |
| 60 | - | s.a32 = ints[31] | |
| 61 | 44 | s.f1 = floats[0] | |
| 62 | 45 | s.f2 = floats[1] | |
| 63 | 46 | s.f3 = floats[2] | |
| @@ -73,7 +56,6 @@ func (s *syscall15Args) Set(fn uintptr, ints []uintptr, floats []uintptr, r8 uin | |||
| 73 | 56 | s.f13 = floats[12] | |
| 74 | 57 | s.f14 = floats[13] | |
| 75 | 58 | s.f15 = floats[14] | |
| 76 | - | s.f16 = floats[15] | |
| 77 | 59 | s.arm64_r8 = r8 | |
| 78 | 60 | } | |
| 79 | 61 | ||
| @@ -41,23 +41,6 @@ func (s *syscall15Args) Set(fn uintptr, ints []uintptr, floats []uintptr, r8 uin | |||||
| 41 | s.a13 = ints[12] | 41 | s.a13 = ints[12] | ||
| 42 | s.a14 = ints[13] | 42 | s.a14 = ints[13] | ||
| 43 | s.a15 = ints[14] | 43 | s.a15 = ints[14] | ||
| 44 | - | s.a16 = ints[15] | |||
| 45 | - | s.a17 = ints[16] | |||
| 46 | - | s.a18 = ints[17] | |||
| 47 | - | s.a19 = ints[18] | |||
| 48 | - | s.a20 = ints[19] | |||
| 49 | - | s.a21 = ints[20] | |||
| 50 | - | s.a22 = ints[21] | |||
| 51 | - | s.a23 = ints[22] | |||
| 52 | - | s.a24 = ints[23] | |||
| 53 | - | s.a25 = ints[24] | |||
| 54 | - | s.a26 = ints[25] | |||
| 55 | - | s.a27 = ints[26] | |||
| 56 | - | s.a28 = ints[27] | |||
| 57 | - | s.a29 = ints[28] | |||
| 58 | - | s.a30 = ints[29] | |||
| 59 | - | s.a31 = ints[30] | |||
| 60 | - | s.a32 = ints[31] | |||
| 61 | s.f1 = floats[0] | 44 | s.f1 = floats[0] | ||
| 62 | s.f2 = floats[1] | 45 | s.f2 = floats[1] | ||
| 63 | s.f3 = floats[2] | 46 | s.f3 = floats[2] | ||
| @@ -73,7 +56,6 @@ func (s *syscall15Args) Set(fn uintptr, ints []uintptr, floats []uintptr, r8 uin | |||||
| 73 | s.f13 = floats[12] | 56 | s.f13 = floats[12] | ||
| 74 | s.f14 = floats[13] | 57 | s.f14 = floats[13] | ||
| 75 | s.f15 = floats[14] | 58 | s.f15 = floats[14] | ||
| 76 | - | s.f16 = floats[15] | |||
| 77 | s.arm64_r8 = r8 | 59 | s.arm64_r8 = r8 | ||
| 78 | } | 60 | } | ||
| 79 | 61 | ||||
A syscall_32bit_internal_test.go +16 -0
| @@ -0,0 +1,16 @@ | |||
| 1 | + | //go:build (386 || arm) && (freebsd || linux || netbsd || windows) | |
| 2 | + | ||
| 3 | + | package purego | |
| 4 | + | ||
| 5 | + | import "testing" | |
| 6 | + | ||
| 7 | + | func TestSyscall15ArgsSetDoesNotPanicWithMaxArgs(t *testing.T) { | |
| 8 | + | defer func() { | |
| 9 | + | if r := recover(); r != nil { | |
| 10 | + | t.Fatalf("Set panicked: %v", r) | |
| 11 | + | } | |
| 12 | + | }() | |
| 13 | + | ||
| 14 | + | var s syscall15Args | |
| 15 | + | s.Set(1, make([]uintptr, maxArgs), make([]uintptr, maxArgs), 8) | |
| 16 | + | } | |
| @@ -0,0 +1,16 @@ | |||||
| 1 | + | //go:build (386 || arm) && (freebsd || linux || netbsd || windows) | |||
| 2 | + | ||||
| 3 | + | package purego | |||
| 4 | + | ||||
| 5 | + | import "testing" | |||
| 6 | + | ||||
| 7 | + | func TestSyscall15ArgsSetDoesNotPanicWithMaxArgs(t *testing.T) { | |||
| 8 | + | defer func() { | |||
| 9 | + | if r := recover(); r != nil { | |||
| 10 | + | t.Fatalf("Set panicked: %v", r) | |||
| 11 | + | } | |||
| 12 | + | }() | |||
| 13 | + | ||||
| 14 | + | var s syscall15Args | |||
| 15 | + | s.Set(1, make([]uintptr, maxArgs), make([]uintptr, maxArgs), 8) | |||
| 16 | + | } | |||