From ad73a0ea8958ed6cb15513798762be65e5c29568 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Sun, 23 Aug 2015 17:47:01 +1000 Subject: [PATCH] bencode: Trailing bytes on Unmarshal is an error --- bencode/api.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/bencode/api.go b/bencode/api.go index b4ddcec9..a17d1820 100644 --- a/bencode/api.go +++ b/bencode/api.go @@ -3,6 +3,7 @@ package bencode import ( "bufio" "bytes" + "errors" "fmt" "io" "reflect" @@ -127,9 +128,23 @@ func Marshal(v interface{}) ([]byte, error) { // 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 } //---------------------------------------------------------------------------- -- 2.48.1