diff --git a/spew/dump.go b/spew/dump.go index c635cfe..057c299 100644 --- a/spew/dump.go +++ b/spew/dump.go @@ -139,8 +139,14 @@ func (d *dumpState) dumpPtr(v reflect.Value) { // appropriately. It is a recursive function, however circular data structures // are detected and handled properly. func (d *dumpState) dump(v reflect.Value) { - // Handle pointers specially. + // Handle invalid reflect values immediately. kind := v.Kind() + if kind == reflect.Invalid { + d.w.Write(invalidAngleBytes) + return + } + + // Handle pointers specially. if kind == reflect.Ptr { d.pad() d.dumpPtr(v) @@ -169,7 +175,8 @@ func (d *dumpState) dump(v reflect.Value) { switch kind { case reflect.Invalid: - d.w.Write(invalidAngleBytes) + // Do nothing. We should never get here since invalid has already + // been handled above. case reflect.Bool: printBool(d.w, v.Bool()) diff --git a/spew/format.go b/spew/format.go index f06cbdb..49ef854 100644 --- a/spew/format.go +++ b/spew/format.go @@ -197,8 +197,14 @@ func (f *formatState) formatPtr(v reflect.Value) { // dealing with and formats it appropriately. It is a recursive function, // however circular data structures are detected and handled properly. func (f *formatState) format(v reflect.Value) { - // Handle pointers specially. + // Handle invalid reflect values immediately. kind := v.Kind() + if kind == reflect.Invalid { + f.fs.Write(invalidAngleBytes) + return + } + + // Handle pointers specially. if kind == reflect.Ptr { f.formatPtr(v) return @@ -224,7 +230,8 @@ func (f *formatState) format(v reflect.Value) { switch kind { case reflect.Invalid: - f.fs.Write(invalidAngleBytes) + // Do nothing. We should never get here since invalid has already + // been handled above. case reflect.Bool: printBool(f.fs, v.Bool())