davecgh / go-spew

Implements a deep pretty printer for Go data structures to aid in debugging

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Slice index out of range panic

lchanglyft opened this issue · comments

I'm calling Sdump on a complex struct and it seems to go out of bounds on a slice:

runtime.gopanic
	/opt/go/src/runtime/panic.go:965
reflect.Value.Index
	/opt/go/src/reflect/value.go:962
github.com/davecgh/go-spew/spew.(*dumpState).dumpSlice
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:238
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:352
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:394
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:391
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dumpSlice
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:238
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:352
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dumpSlice
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:238
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:352
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:421
github.com/davecgh/go-spew/spew.(*dumpState).dumpPtr
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:154
github.com/davecgh/go-spew/spew.(*dumpState).dump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:262
github.com/davecgh/go-spew/spew.fdump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:465
github.com/davecgh/go-spew/spew.Sdump
	/code/.cache/gopath/pkg/mod/github.com/davecgh/go-spew@v1.1.2-0.20180830191138-d8f796af33cc/spew/dump.go:480

Here's the code block in value that it's hitting:

	case Slice:
		// Element flag same as Elem of Ptr.
		// Addressable, indirect, possibly read-only.
		s := (*unsafeheader.Slice)(v.ptr)
		if uint(i) >= uint(s.Len) {
			panic("reflect: slice index out of range")
		}

This was in prod so I'm not sure what the exact input was, but let me know if there's anything else that would be relevant.

Thanks!