windows, unix: fix wrong unsafe.Pointer alignment in syscall
Same as CL 201877 did for package syscall.
Updates golang/go#34972
Change-Id: I3929841ab32378516edafb1f02a84b1bdcc77bbd
Reviewed-on: https://go-review.googlesource.com/c/sys/+/202177
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/unix/syscall_bsd.go b/unix/syscall_bsd.go
index 3e66714..d52bcc4 100644
--- a/unix/syscall_bsd.go
+++ b/unix/syscall_bsd.go
@@ -237,7 +237,7 @@
break
}
}
- bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
+ bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
sa.Name = string(bytes)
return sa, nil
diff --git a/unix/syscall_linux.go b/unix/syscall_linux.go
index ebf3195..26903bc 100644
--- a/unix/syscall_linux.go
+++ b/unix/syscall_linux.go
@@ -884,7 +884,7 @@
for n < len(pp.Path) && pp.Path[n] != 0 {
n++
}
- bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
+ bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
sa.Name = string(bytes)
return sa, nil
diff --git a/unix/syscall_solaris.go b/unix/syscall_solaris.go
index 62f968c..0e2a696 100644
--- a/unix/syscall_solaris.go
+++ b/unix/syscall_solaris.go
@@ -391,7 +391,7 @@
for n < len(pp.Path) && pp.Path[n] != 0 {
n++
}
- bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
+ bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
sa.Name = string(bytes)
return sa, nil
diff --git a/windows/security_windows.go b/windows/security_windows.go
index c605ee6..d88ed91 100644
--- a/windows/security_windows.go
+++ b/windows/security_windows.go
@@ -229,13 +229,15 @@
// String converts SID to a string format suitable for display, storage, or transmission.
func (sid *SID) String() string {
+ // From https://docs.microsoft.com/en-us/windows/win32/secbiomet/general-constants
+ const SecurityMaxSidSize = 68
var s *uint16
e := ConvertSidToStringSid(sid, &s)
if e != nil {
return ""
}
defer LocalFree((Handle)(unsafe.Pointer(s)))
- return UTF16ToString((*[(1 << 30) - 1]uint16)(unsafe.Pointer(s))[:])
+ return UTF16ToString((*[SecurityMaxSidSize]uint16)(unsafe.Pointer(s))[:])
}
// Len returns the length, in bytes, of a valid security identifier SID.
diff --git a/windows/syscall_windows.go b/windows/syscall_windows.go
index df0ffc6..9035869 100644
--- a/windows/syscall_windows.go
+++ b/windows/syscall_windows.go
@@ -857,7 +857,7 @@
for n < len(pp.Path) && pp.Path[n] != 0 {
n++
}
- bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
+ bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
sa.Name = string(bytes)
return sa, nil