From 17f5fb1071afa78ca41220a197098506377b2396 Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Tue, 21 Mar 2023 11:11:19 -0700 Subject: [PATCH] reflect; SetLen() requires an addressable value --- src/reflect/value.go | 2 +- src/reflect/value_test.go | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/reflect/value.go b/src/reflect/value.go index f63a503e..a5f6782f 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -999,7 +999,7 @@ func (v Value) SetLen(n int) { if v.typecode.Kind() != Slice { panic(&ValueError{Method: "reflect.Value.SetLen", Kind: v.Kind()}) } - + v.checkAddressable() hdr := (*sliceHeader)(v.value) if int(uintptr(n)) != n || uintptr(n) > hdr.cap { panic("reflect.Value.SetLen: slice length out of range") diff --git a/src/reflect/value_test.go b/src/reflect/value_test.go index 148e8c81..1074a166 100644 --- a/src/reflect/value_test.go +++ b/src/reflect/value_test.go @@ -180,6 +180,8 @@ func TestSlice(t *testing.T) { } // should be equivalent to s28 now, except for the capacity which doesn't change + + s268ref = ValueOf(&s268).Elem() s268ref.SetLen(6) if len(s28) != s268ref.Len() || cap(s268) != s268ref.Cap() { t.Errorf("SetLen: len(s268)=%d s268ref.Len()=%d cap(s268)=%d s268ref.Cap()=%d\n", len(s28), s268ref.Len(), cap(s268), s268ref.Cap())