bencode/decode.go | 14 ++++++++------ diff --git a/bencode/decode.go b/bencode/decode.go index 2888d080a1e7815d0718fcee13a9350b97a5f990..27ff898c0da81f016844f0fc4bc9411b4af475e8 100644 --- a/bencode/decode.go +++ b/bencode/decode.go @@ -98,34 +98,36 @@ What: errors.New("empty integer value"), }) } + s := d.buf.String() + switch v.Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - n, err := strconv.ParseInt(d.buf.String(), 10, 64) + n, err := strconv.ParseInt(s, 10, 64) check_for_int_parse_error(err, start) if v.OverflowInt(n) { panic(&UnmarshalTypeError{ - Value: "integer " + d.buf.String(), + Value: "integer " + s, Type: v.Type(), }) } v.SetInt(n) case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - n, err := strconv.ParseUint(d.buf.String(), 10, 64) + n, err := strconv.ParseUint(s, 10, 64) check_for_int_parse_error(err, start) if v.OverflowUint(n) { panic(&UnmarshalTypeError{ - Value: "integer " + d.buf.String(), + Value: "integer " + s, Type: v.Type(), }) } v.SetUint(n) case reflect.Bool: - v.SetBool(d.buf.String() != "0") + v.SetBool(s != "0") default: panic(&UnmarshalTypeError{ - Value: "integer " + d.buf.String(), + Value: "integer " + s, Type: v.Type(), }) }