]> Sergey Matveev's repositories - btrtrc.git/commitdiff
bencode: Don't allow extraneous trailing 'e's
authorMatt Joiner <anacrolix@gmail.com>
Sun, 23 Aug 2015 07:45:59 +0000 (17:45 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 23 Aug 2015 07:45:59 +0000 (17:45 +1000)
bencode/decode.go

index 2ab9c01792b61c4a9d7de92db19eb71c429b6694..2888d080a1e7815d0718fcee13a9350b97a5f990 100644 (file)
@@ -33,7 +33,9 @@ func (d *decoder) decode(v interface{}) (err error) {
                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
 }
 
@@ -78,6 +80,13 @@ func check_for_int_parse_error(err error, offset int64) {
        }
 }
 
+func (d *decoder) throwSyntaxError(offset int64, err error) {
+       panic(&SyntaxError{
+               Offset: offset,
+               What:   err,
+       })
+}
+
 // called when 'i' was consumed
 func (d *decoder) parse_int(v reflect.Value) {
        start := d.offset - 1