From 7e2c384bd5f5e3eee8447ab56c28e5eb8c4eb3e4 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Thu, 20 Mar 2014 01:54:18 +1100 Subject: [PATCH] Fix buffer reuse bug and some formatting. --- bencode/decode.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bencode/decode.go b/bencode/decode.go index e3324b47..82cad32b 100644 --- a/bencode/decode.go +++ b/bencode/decode.go @@ -152,7 +152,9 @@ func (d *decoder) parse_string(v reflect.Value) { Type: v.Type(), }) } - v.Set(reflect.ValueOf(d.buf.Bytes())) + sl := make([]byte, len(d.buf.Bytes())) + copy(sl, d.buf.Bytes()) + v.Set(reflect.ValueOf(sl)) default: panic(&UnmarshalTypeError{ Value: "string", @@ -335,7 +337,8 @@ func (d *decoder) read_one_value() bool { switch b { case 'd', 'l': // read until there is nothing to read - for d.read_one_value() {} + for d.read_one_value() { + } // consume 'e' as well b = d.read_byte() d.buf.WriteByte(b) @@ -347,7 +350,7 @@ func (d *decoder) read_one_value() bool { start := d.buf.Len() - 1 d.read_until(':') length, err := strconv.ParseInt(d.buf.String()[start:], 10, 64) - check_for_int_parse_error(err, d.offset - 1) + check_for_int_parse_error(err, d.offset-1) d.buf.WriteString(":") n, err := io.CopyN(&d.buf, d, length) -- 2.48.1