@@ -6,6 +6,7 @@ package wasip1
66import (
77 "encoding/binary"
88 "runtime"
9+ "strings"
910 "syscall"
1011 "unsafe"
1112)
@@ -299,14 +300,6 @@ type addrInfo struct {
299300}
300301
301302func 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