From: Matt Joiner Date: Sun, 23 Aug 2015 07:47:01 +0000 (+1000) Subject: bencode: Trailing bytes on Unmarshal is an error X-Git-Tag: v1.0.0~1052 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=ad73a0ea8958ed6cb15513798762be65e5c29568;p=btrtrc.git bencode: Trailing bytes on Unmarshal is an error --- 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 } //----------------------------------------------------------------------------