diff options
author | Josh Bleecher Snyder <josharian@gmail.com> | 2021-05-21 09:35:46 -0700 |
---|---|---|
committer | Josh Bleecher Snyder <josharian@gmail.com> | 2021-09-05 23:10:46 +0000 |
commit | 7619a4528d506277f44e8d4b70366b5b5633b40f (patch) | |
tree | 320824745c186a172ab632694483b50374b97ed6 /src/reflect | |
parent | 1b2d794ca3ba60c2dbc958a271662784a7122739 (diff) | |
download | go-7619a4528d506277f44e8d4b70366b5b5633b40f.tar.gz go-7619a4528d506277f44e8d4b70366b5b5633b40f.zip |
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>
Diffstat (limited to 'src/reflect')
-rw-r--r-- | src/reflect/value.go | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/reflect/value.go b/src/reflect/value.go index 1a61cb897c..90f31bae0a 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -1686,6 +1686,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.hiter.initialized() { mapiterinit(it.m.typ, it.m.pointer(), &it.hiter) } else { |