Skip to content

Commit 452e0f8

Browse files
add nullTerminatedString function
Signed-off-by: Achille Roussel <[email protected]>
1 parent 03601fa commit 452e0f8

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

wasip1/syscall_wasmedge_wasip1.go

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package wasip1
66
import (
77
"encoding/binary"
88
"runtime"
9+
"strings"
910
"syscall"
1011
"unsafe"
1112
)
@@ -299,14 +300,6 @@ type addrInfo struct {
299300
}
300301

301302
func getaddrinfo(name, service string, hints *addrInfo, results []addrInfo) (int, error) {
302-
// For compatibility with WasmEdge, make sure strings are null-terminated.
303-
if len(name) > 0 && name[len(name)-1] != 0 {
304-
name = string(append([]byte(name), 0))
305-
}
306-
if len(service) > 0 && service[len(service)-1] != 0 {
307-
service = string(append([]byte(service), 0))
308-
}
309-
310303
hints.sockAddrInfo = sockAddrInfo{
311304
ai_flags: uint16(hints.flags),
312305
ai_family: uint8(hints.family),
@@ -335,13 +328,16 @@ func getaddrinfo(name, service string, hints *addrInfo, results []addrInfo) (int
335328
}
336329

337330
resPtr := uintptr32(uintptr(unsafe.Pointer(&results[0].sockAddrInfo)))
331+
// For compatibility with WasmEdge, make sure strings are null-terminated.
332+
namePtr, nameLen := nullTerminatedString(name)
333+
servPtr, servLen := nullTerminatedString(service)
338334

339335
var n uint32
340336
errno := sock_getaddrinfo(
341-
unsafe.Pointer(unsafe.StringData(name)),
342-
uint32(len(name)),
343-
unsafe.Pointer(unsafe.StringData(service)),
344-
uint32(len(service)),
337+
unsafe.Pointer(namePtr),
338+
uint32(nameLen),
339+
unsafe.Pointer(servPtr),
340+
uint32(servLen),
345341
unsafe.Pointer(&hints.sockAddrInfo),
346342
unsafe.Pointer(&resPtr),
347343
uint32(len(results)),
@@ -370,3 +366,13 @@ func getaddrinfo(name, service string, hints *addrInfo, results []addrInfo) (int
370366
}
371367
return int(n), nil
372368
}
369+
370+
func nullTerminatedString(s string) (*byte, int) {
371+
if n := strings.IndexByte(s, 0); n >= 0 {
372+
s = s[:n+1]
373+
return unsafe.StringData(s), len(s)
374+
} else {
375+
b := append([]byte(s), 0)
376+
return unsafe.SliceData(b), len(b)
377+
}
378+
}

0 commit comments

Comments
 (0)