bencode/decode.go | 11 ++++++++++- diff --git a/bencode/decode.go b/bencode/decode.go index 2ab9c01792b61c4a9d7de92db19eb71c429b6694..2888d080a1e7815d0718fcee13a9350b97a5f990 100644 --- a/bencode/decode.go +++ b/bencode/decode.go @@ -33,7 +33,9 @@ if pv.Kind() != reflect.Ptr || pv.IsNil() { return &UnmarshalInvalidArgError{reflect.TypeOf(v)} } - d.parse_value(pv.Elem()) + if !d.parse_value(pv.Elem()) { + d.throwSyntaxError(d.offset-1, errors.New("unexpected 'e'")) + } return nil } @@ -76,6 +78,13 @@ Offset: offset, What: err, }) } +} + +func (d *decoder) throwSyntaxError(offset int64, err error) { + panic(&SyntaxError{ + Offset: offset, + What: err, + }) } // called when 'i' was consumed