1
0
mirror of https://github.com/golang/go synced 2024-11-26 17:56:55 -07:00

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
Reviewed-on: https://go-review.googlesource.com/c/go/+/321890
Trust: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Josh Bleecher Snyder 2021-05-21 09:35:46 -07:00
parent 1b2d794ca3
commit 7619a4528d

View File

@ -1686,6 +1686,9 @@ func (it *MapIter) SetValue(dst Value) {
// entry. It returns false when the iterator is exhausted; subsequent // entry. It returns false when the iterator is exhausted; subsequent
// calls to Key, Value, or Next will panic. // calls to Key, Value, or Next will panic.
func (it *MapIter) Next() bool { 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.hiter.initialized() { if !it.hiter.initialized() {
mapiterinit(it.m.typ, it.m.pointer(), &it.hiter) mapiterinit(it.m.typ, it.m.pointer(), &it.hiter)
} else { } else {