Commit dfb0e4f6 authored by Martin Möhrmann's avatar Martin Möhrmann

runtime: avoid clearing memory during byte slice allocation in gobytes

Avoid using make in gobytes which clears the byte slice backing
array unnecessarily since the content is overwritten immediately again.

Check that the user provided length is positive and below the maximum
allowed allocation size explicitly in gobytes as this was done in makeslice
before this change.

Fixes #23634

Change-Id: Id852619e932aabfc468871c42ad07d34da91f45c
Reviewed-on: https://go-review.googlesource.com/94760
Run-TryBot: Martin Möhrmann <moehrmann@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
parent a4e950ec
......@@ -280,13 +280,20 @@ func rawruneslice(size int) (b []rune) {
}
// used by cmd/cgo
func gobytes(p *byte, n int) []byte {
func gobytes(p *byte, n int) (b []byte) {
if n == 0 {
return make([]byte, 0)
}
x := make([]byte, n)
memmove(unsafe.Pointer(&x[0]), unsafe.Pointer(p), uintptr(n))
return x
if n < 0 || uintptr(n) > maxAlloc {
panic(errorString("gobytes: length out of range"))
}
bp := mallocgc(uintptr(n), nil, false)
memmove(bp, unsafe.Pointer(p), uintptr(n))
*(*slice)(unsafe.Pointer(&b)) = slice{bp, n, n}
return
}
func gostring(p *byte) string {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment