From e236cbf1453312652c65d0a0d2ae07c4efcaed78 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Tue, 27 Nov 2018 08:57:17 +1100 Subject: [PATCH] bencode: Fix marshalling of []byte(nil) Also fixes #293. --- bencode/encode.go | 8 ++++---- bencode/encode_test.go | 1 + peer_protocol/pex_test.go | 8 ++++++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/bencode/encode.go b/bencode/encode.go index 8542d430..496ca908 100644 --- a/bencode/encode.go +++ b/bencode/encode.go @@ -159,15 +159,15 @@ func (e *Encoder) reflectValue(v reflect.Value) { } e.writeString("e") case reflect.Slice: - if v.IsNil() { - e.writeString("le") - break - } if v.Type().Elem().Kind() == reflect.Uint8 { s := v.Bytes() e.reflectByteSlice(s) break } + if v.IsNil() { + e.writeString("le") + break + } fallthrough case reflect.Array: e.writeString("l") diff --git a/bencode/encode_test.go b/bencode/encode_test.go index bdb0d991..7fc3234a 100644 --- a/bencode/encode_test.go +++ b/bencode/encode_test.go @@ -53,6 +53,7 @@ var random_encode_tests = []random_encode_test{ {[4]byte{1, 2, 3, 4}, "li1ei2ei3ei4ee"}, {nil, ""}, {[]byte{}, "0:"}, + {[]byte(nil), "0:"}, {"", "0:"}, {[]int{}, "le"}, {map[string]int{}, "de"}, diff --git a/peer_protocol/pex_test.go b/peer_protocol/pex_test.go index 59a17c87..19cd66bf 100644 --- a/peer_protocol/pex_test.go +++ b/peer_protocol/pex_test.go @@ -15,3 +15,11 @@ func TestUnmarshalPex(t *testing.T) { require.EqualValues(t, 1286, pem.Added[0].Port) require.EqualValues(t, 0x100*0xb+0xc, pem.Added[1].Port) } + +func TestEmptyPexMsg(t *testing.T) { + pm := PexMsg{} + b, err := bencode.Marshal(pm) + t.Logf("%q", b) + require.NoError(t, err) + require.NoError(t, bencode.Unmarshal(b, &pm)) +} -- 2.48.1