import (
"bufio"
"bytes"
+ "errors"
"fmt"
"io"
"reflect"
// 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
}
//----------------------------------------------------------------------------