From 9989221ac1853aeda5795952a744de522699494f Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Fri, 18 Oct 2019 12:03:18 -0700 Subject: [PATCH] reflect, internal/reflectlite: set capacity when slicing unsafe pointers Follow the idiom for allowing -d=checkptr to recognize and verify correctness. Updates #22218. Updates #34972. Change-Id: Ib6001c6f0e6dc535a36bcfaa1ae48e29e0c737f8 Reviewed-on: https://go-review.googlesource.com/c/go/+/202580 Run-TryBot: Matthew Dempsky Reviewed-by: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/internal/reflectlite/type.go | 4 ++-- src/reflect/type.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/internal/reflectlite/type.go b/src/internal/reflectlite/type.go index e90071c67c..49a03ac1e1 100644 --- a/src/internal/reflectlite/type.go +++ b/src/internal/reflectlite/type.go @@ -629,7 +629,7 @@ func (t *funcType) in() []*rtype { if t.inCount == 0 { return nil } - return (*[1 << 20]*rtype)(add(unsafe.Pointer(t), uadd, "t.inCount > 0"))[:t.inCount] + return (*[1 << 20]*rtype)(add(unsafe.Pointer(t), uadd, "t.inCount > 0"))[:t.inCount:t.inCount] } func (t *funcType) out() []*rtype { @@ -641,7 +641,7 @@ func (t *funcType) out() []*rtype { if outCount == 0 { return nil } - return (*[1 << 20]*rtype)(add(unsafe.Pointer(t), uadd, "outCount > 0"))[t.inCount : t.inCount+outCount] + return (*[1 << 20]*rtype)(add(unsafe.Pointer(t), uadd, "outCount > 0"))[t.inCount : t.inCount+outCount : t.inCount+outCount] } // add returns p+x. diff --git a/src/reflect/type.go b/src/reflect/type.go index 231b38b898..e4b0432d42 100644 --- a/src/reflect/type.go +++ b/src/reflect/type.go @@ -1008,7 +1008,7 @@ func (t *funcType) in() []*rtype { if t.inCount == 0 { return nil } - return (*[1 << 20]*rtype)(add(unsafe.Pointer(t), uadd, "t.inCount > 0"))[:t.inCount] + return (*[1 << 20]*rtype)(add(unsafe.Pointer(t), uadd, "t.inCount > 0"))[:t.inCount:t.inCount] } func (t *funcType) out() []*rtype { @@ -1020,7 +1020,7 @@ func (t *funcType) out() []*rtype { if outCount == 0 { return nil } - return (*[1 << 20]*rtype)(add(unsafe.Pointer(t), uadd, "outCount > 0"))[t.inCount : t.inCount+outCount] + return (*[1 << 20]*rtype)(add(unsafe.Pointer(t), uadd, "outCount > 0"))[t.inCount : t.inCount+outCount : t.inCount+outCount] } // add returns p+x. -- 2.48.1