]> Sergey Matveev's repositories - btrtrc.git/commitdiff
bencode: Fix marshalling of []byte(nil)
authorMatt Joiner <anacrolix@gmail.com>
Mon, 26 Nov 2018 21:57:17 +0000 (08:57 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 26 Nov 2018 21:57:17 +0000 (08:57 +1100)
Also fixes #293.

bencode/encode.go
bencode/encode_test.go
peer_protocol/pex_test.go

index 8542d430ce33b7da28a4352d7b42065d680a6c41..496ca908f94a4b08db01428001605693ddcc7f1e 100644 (file)
@@ -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")
index bdb0d991a698e473465e6258a78b66cc6c120024..7fc3234ad48c4da9c40d138487032efc324cf4b9 100644 (file)
@@ -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"},
index 59a17c87f42b5d6620056d48a8880241b3e53e72..19cd66bfd8372115c3b43f9aa1ae28d82bd2e98f 100644 (file)
@@ -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))
+}