bencode/api.go | 19 +++++++++++++++++-- diff --git a/bencode/api.go b/bencode/api.go index b4ddcec983dd87a83e38f26bc4c50c552972f40b..a17d182037adccf4df013852b3af888283708d63 100644 --- a/bencode/api.go +++ b/bencode/api.go @@ -3,6 +3,7 @@ import ( "bufio" "bytes" + "errors" "fmt" "io" "reflect" @@ -127,9 +128,23 @@ } // Unmarshal the bencode value in the 'data' to a value pointed by the 'v' // pointer, return a non-nil error if any. -func Unmarshal(data []byte, v interface{}) error { +func Unmarshal(data []byte, v interface{}) (err error) { e := decoder{Reader: bufio.NewReader(bytes.NewBuffer(data))} - return e.decode(v) + err = e.decode(v) + if err != nil { + return + } + _, err = e.Reader.ReadByte() + if err == io.EOF { + return nil + } + if err == nil { + err = &SyntaxError{ + Offset: e.offset, + What: errors.New("trailing bytes"), + } + } + return } //----------------------------------------------------------------------------