From bf1d94bd9ece7e0cb226b86d404b7d7cb387757f Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Mon, 24 May 2021 13:59:31 -0700 Subject: [PATCH] [tailscale1.16] reflect: improve panic when MapIter has no associated map Value it := new(reflect.MapIter) it.Next() This generates a nil pointer dereference panic from reflect.Value.pointer. Generate a clearer panic. For #46293 (cherry picked from golang.org/cl/321890) Change-Id: I32a22c797e1ba3a7b4e70b38ceb4dedb44d264fa --- src/reflect/value.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/reflect/value.go b/src/reflect/value.go index adfd7f0365e53..be159b8e7d9a0 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -1342,6 +1342,9 @@ func (it *MapIter) SetValue(dst Value) { // entry. It returns false when the iterator is exhausted; subsequent // calls to Key, Value, or Next will panic. func (it *MapIter) Next() bool { + if !it.m.IsValid() { + panic("MapIter.Next called on an iterator that does not have an associated map Value") + } if it.it == nil { it.it = unsafe.Pointer(&it.hiter) mapiterinit(it.m.typ, it.m.pointer(), it.it)