From 5f4fdfbd3dd9e39ecc2c3c3125cb87761af08864 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Tue, 3 Nov 2015 23:21:10 +1100 Subject: [PATCH] bencode: Improve unknown value type error --- bencode/decode.go | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/bencode/decode.go b/bencode/decode.go index f9078341..9cb2a0d6 100644 --- a/bencode/decode.go +++ b/bencode/decode.go @@ -4,6 +4,7 @@ import ( "bufio" "bytes" "errors" + "fmt" "io" "math/big" "reflect" @@ -371,11 +372,7 @@ func (d *decoder) read_one_value() bool { break } - // unknown value - panic(&SyntaxError{ - Offset: d.offset - 1, - What: errors.New("unknown value type (invalid bencode?)"), - }) + d.raiseUnknownValueType(b, d.offset-1) } return true @@ -456,16 +453,20 @@ func (d *decoder) parse_value(v reflect.Value) bool { break } - // unknown value - panic(&SyntaxError{ - Offset: d.offset - 1, - What: errors.New("unknown value type (invalid bencode?)"), - }) + d.raiseUnknownValueType(b, d.offset-1) } return true } +// An unknown bencode type character was encountered. +func (d *decoder) raiseUnknownValueType(b byte, offset int64) { + panic(&SyntaxError{ + Offset: offset, + What: fmt.Errorf("unknown value type %+q", b), + }) +} + func (d *decoder) parse_value_interface() (interface{}, bool) { b, err := d.ReadByte() if err != nil { @@ -490,11 +491,8 @@ func (d *decoder) parse_value_interface() (interface{}, bool) { return d.parse_string_interface(), true } - // unknown value - panic(&SyntaxError{ - Offset: d.offset - 1, - What: errors.New("unknown value type (invalid bencode?)"), - }) + d.raiseUnknownValueType(b, d.offset-1) + panic("unreachable") } } -- 2.48.1