From 742dd1ef4836dd708e6cb554f340a6177827d643 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Fri, 21 May 2021 09:35:46 -0700 Subject: [PATCH] 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 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 adfd7f0365e53a..be159b8e7d9a05 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)