From: Matt Joiner Date: Tue, 3 Nov 2015 12:21:10 +0000 (+1100) Subject: bencode: Improve unknown value type error X-Git-Tag: v1.0.0~996 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=5f4fdfbd3dd9e39ecc2c3c3125cb87761af08864;p=btrtrc.git bencode: Improve unknown value type error --- 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") } }