From: Matt Joiner Date: Mon, 26 Nov 2018 21:57:17 +0000 (+1100) Subject: bencode: Fix marshalling of []byte(nil) X-Git-Tag: v1.0.0~14 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=e236cbf1453312652c65d0a0d2ae07c4efcaed78;p=btrtrc.git bencode: Fix marshalling of []byte(nil) Also fixes #293. --- 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)) +}