From d7225aed03e22743bbce46c5ed813342d9cbaa6a Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Fri, 13 Apr 2018 17:07:19 +1000 Subject: [PATCH] Fix #247 --- bencode/decode.go | 5 +++-- metainfo/metainfo_test.go | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/bencode/decode.go b/bencode/decode.go index dc985aaf..2905aec9 100644 --- a/bencode/decode.go +++ b/bencode/decode.go @@ -495,8 +495,9 @@ func (d *Decoder) parseValue(v reflect.Value) (bool, error) { return true, nil default: if b >= '0' && b <= '9' { - // string - // append first digit of the length to the buffer + // It's a string. + d.buf.Reset() + // Write the first digit of the length to the buffer. d.buf.WriteByte(b) return true, d.parseString(v) } diff --git a/metainfo/metainfo_test.go b/metainfo/metainfo_test.go index 89e69c34..e54447ae 100644 --- a/metainfo/metainfo_test.go +++ b/metainfo/metainfo_test.go @@ -128,3 +128,12 @@ func TestMetainfoWithStringURLList(t *testing.T) { require.NoError(t, err) assert.Len(t, mi.UrlList, 1) } + +// https://github.com/anacrolix/torrent/issues/247 +// +// The decoder buffer wasn't cleared before starting the next dict item after +// a syntax error on a field with the ignore_unmarshal_type_error tag. +func TestStringCreationDate(t *testing.T) { + var mi MetaInfo + assert.NoError(t, bencode.Unmarshal([]byte("d13:creation date23:29.03.2018 22:18:14 UTC4:infodee"), &mi)) +} -- 2.44.0