From 11d383f1c75b4602108b6b7e64344279e659cc02 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Sun, 14 Jan 2018 18:37:59 -0500 Subject: [PATCH 1/4] update for go-wire sdk2 --- glide.lock | 22 +++++++++++----------- glide.yaml | 6 +++--- types/messages.go | 34 ++++++++++++++++++++++++---------- types/messages_test.go | 20 ++++++++++++++++++++ 4 files changed, 58 insertions(+), 24 deletions(-) diff --git a/glide.lock b/glide.lock index 805b7b256..e79c02920 100644 --- a/glide.lock +++ b/glide.lock @@ -1,10 +1,14 @@ -hash: 1fbe2d780f4901d78d2e986a694e6335ae07715317c7d680db64e1d69f08aff7 -updated: 2018-01-05T22:07:26.119496005-05:00 +hash: e0a7a8b1023ecddcba757af1136c2a8b642909026252d6cde389c0120f283abb +updated: 2018-01-14T18:26:26.193727554-05:00 imports: - name: github.com/btcsuite/btcd version: c7588cbf7690cd9f047a28efa2dcd8f2435a4e5e subpackages: - btcec +- name: github.com/davecgh/go-spew + version: 04cdfd42973bb9c8589fd6a731800cf222fde1a9 + subpackages: + - spew - name: github.com/go-kit/kit version: e2b298466b32c7cd5579a9b9b07e968fc9d9452c subpackages: @@ -67,15 +71,15 @@ imports: - edwards25519 - extra25519 - name: github.com/tendermint/go-crypto - version: 3ebe3250ff67e8af92f00ec3dc427c14a7eb1066 + version: 32741be2126500d600cede1e2016bbbe2754cb46 - name: github.com/tendermint/go-wire - version: 27be46e25124ddf775e23317a83647ce62a93f6b + version: b93ebdd4f306833936c243561ec30af3455dc764 subpackages: - data - name: github.com/tendermint/iavl - version: ed0bbf0acc51e75f72c76099293113c2d67199b9 + version: 1dfe265ab4b491418e88e1da6577a8ad594fc989 - name: github.com/tendermint/tmlibs - version: 1afc0340069d38e71f137bc9e4fa4fadf12f76df + version: f2bc5432c31974bb3f5b1a80a53c38e37d481b8d subpackages: - common - db @@ -131,16 +135,12 @@ imports: - tap - transport testImports: -- name: github.com/davecgh/go-spew - version: 04cdfd42973bb9c8589fd6a731800cf222fde1a9 - subpackages: - - spew - name: github.com/pmezard/go-difflib version: d8ed2627bdf02c080bf22230dbb337003b7aba2d subpackages: - difflib - name: github.com/stretchr/testify - version: 2aa2c176b9dab406a6970f6a55f513e8a8c8b18f + version: b91bfb9ebec76498946beb6af7c0230c7cc7ba6c subpackages: - assert - require diff --git a/glide.yaml b/glide.yaml index 89b38239a..3923b1cdd 100644 --- a/glide.yaml +++ b/glide.yaml @@ -7,15 +7,15 @@ import: - package: github.com/spf13/cobra version: v0.0.1 - package: github.com/tendermint/go-crypto - version: develop + version: sdk2 - package: github.com/tendermint/go-wire - version: develop + version: sdk2 subpackages: - data - package: github.com/tendermint/iavl version: sdk2 - package: github.com/tendermint/tmlibs - version: develop + version: sdk2 subpackages: - common - db diff --git a/types/messages.go b/types/messages.go index 5ce234cf1..be49461ad 100644 --- a/types/messages.go +++ b/types/messages.go @@ -1,33 +1,47 @@ package types import ( + "bufio" + "encoding/binary" "io" "github.com/gogo/protobuf/proto" wire "github.com/tendermint/go-wire" ) -// WriteMessage writes a length-delimited protobuf message. +const ( + maxMsgSize = 104857600 // 100MB +) + +// WriteMessage writes a varint length-delimited protobuf message. func WriteMessage(msg proto.Message, w io.Writer) error { bz, err := proto.Marshal(msg) if err != nil { return err } - var n int - wire.WriteByteSlice(bz, w, &n, &err) - return err + return wire.EncodeByteSlice(w, bz) } -// ReadMessage reads a length delimited protobuf message. +// ReadMessage reads a varint length-delimited protobuf message. func ReadMessage(r io.Reader, msg proto.Message) error { - var n int - var err error - bz := wire.ReadByteSlice(r, 0, &n, &err) //XXX: no max + return readProtoMsg(r, msg, maxMsgSize) +} + +func readProtoMsg(r io.Reader, msg proto.Message, maxSize int) error { + reader := bufio.NewReader(r) + length64, err := binary.ReadVarint(reader) if err != nil { return err } - err = proto.Unmarshal(bz, msg) - return err + length := int(length64) + if length < 0 || length > maxSize { + return io.ErrShortBuffer + } + buf := make([]byte, length) + if _, err := io.ReadFull(reader, buf); err != nil { + return err + } + return proto.Unmarshal(buf, msg) } //---------------------------------------- diff --git a/types/messages_test.go b/types/messages_test.go index 34d958e7d..990a81483 100644 --- a/types/messages_test.go +++ b/types/messages_test.go @@ -32,6 +32,26 @@ func TestMarshalJSON(t *testing.T) { assert.Equal(t, r1, r2) } +func TestWriteReadMessageSimple(t *testing.T) { + cases := []proto.Message{ + &RequestEcho{ + Message: "Hello", + }, + } + + for _, c := range cases { + buf := new(bytes.Buffer) + err := WriteMessage(c, buf) + assert.Nil(t, err) + + msg := new(RequestEcho) + err = ReadMessage(buf, msg) + assert.Nil(t, err) + + assert.Equal(t, c, msg) + } +} + func TestWriteReadMessage(t *testing.T) { cases := []proto.Message{ &Header{ From 700792bc10f108e83e86784402e0033266bf53be Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Sat, 3 Feb 2018 00:08:39 -0500 Subject: [PATCH 2/4] update glide --- glide.lock | 32 +++++++++++++++----------------- glide.yaml | 12 +++++------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/glide.lock b/glide.lock index e79c02920..dc9ca4774 100644 --- a/glide.lock +++ b/glide.lock @@ -1,16 +1,16 @@ -hash: e0a7a8b1023ecddcba757af1136c2a8b642909026252d6cde389c0120f283abb -updated: 2018-01-14T18:26:26.193727554-05:00 +hash: e064ab92feb559882cff91eac455ae0425b5704d83998798ec6d36544c52aa17 +updated: 2018-02-03T00:02:35.741382486-05:00 imports: - name: github.com/btcsuite/btcd - version: c7588cbf7690cd9f047a28efa2dcd8f2435a4e5e + version: 2e60448ffcc6bf78332d1fe590260095f554dd78 subpackages: - btcec - name: github.com/davecgh/go-spew - version: 04cdfd42973bb9c8589fd6a731800cf222fde1a9 + version: 346938d642f2ec3594ed81d874461961cd0faa76 subpackages: - spew - name: github.com/go-kit/kit - version: e2b298466b32c7cd5579a9b9b07e968fc9d9452c + version: 4dc7be5d2d12881735283bcab7352178e190fc71 subpackages: - log - log/level @@ -20,7 +20,7 @@ imports: - name: github.com/go-stack/stack version: 817915b46b97fd7bb80e8ab6b69f01a53ac3eebf - name: github.com/gogo/protobuf - version: 342cbe0a04158f6dcb03ca0079991a51a4248c02 + version: 1adfc126b41513cc696b209667c8656ea7aac67c subpackages: - gogoproto - jsonpb @@ -29,7 +29,7 @@ imports: - sortkeys - types - name: github.com/golang/protobuf - version: 1643683e1b54a9e88ad26d98f81400c8c9d9f4f9 + version: 1e59b77b52bf8e4b449a57e6f79f21226d571845 subpackages: - proto - ptypes @@ -66,20 +66,18 @@ imports: - leveldb/table - leveldb/util - name: github.com/tendermint/ed25519 - version: 1f52c6f8b8a5c7908aff4497c186af344b428925 + version: d8387025d2b9d158cf4efb07e7ebf814bcce2057 subpackages: - edwards25519 - extra25519 - name: github.com/tendermint/go-crypto - version: 32741be2126500d600cede1e2016bbbe2754cb46 + version: 4fc3055dbd17aa1203d0abc64b9293f378da22ec - name: github.com/tendermint/go-wire - version: b93ebdd4f306833936c243561ec30af3455dc764 - subpackages: - - data + version: dec83f641903b22f039da3974607859715d0377e - name: github.com/tendermint/iavl - version: 1dfe265ab4b491418e88e1da6577a8ad594fc989 + version: bbf92e0e58351b4970ac4d8a8f3255be453a2147 - name: github.com/tendermint/tmlibs - version: f2bc5432c31974bb3f5b1a80a53c38e37d481b8d + version: 1d7fc78ea171587e9e63da566d3da1b127bfd14c subpackages: - common - db @@ -95,7 +93,7 @@ imports: - ripemd160 - salsa20/salsa - name: golang.org/x/net - version: cd69bc3fc700721b709c3a59e16e24c67b58f6ff + version: d866cfc389cec985d6fda2859936a575a55a3ab6 subpackages: - context - http2 @@ -112,7 +110,7 @@ imports: - unicode/bidi - unicode/norm - name: google.golang.org/genproto - version: f676e0f3ac6395ff1a529ae59a6670878a8371a6 + version: a8101f21cf983e773d0c1133ebc5424792003214 subpackages: - googleapis/rpc/status - name: google.golang.org/grpc @@ -140,7 +138,7 @@ testImports: subpackages: - difflib - name: github.com/stretchr/testify - version: b91bfb9ebec76498946beb6af7c0230c7cc7ba6c + version: 12b6f73e6084dad08a7c6e575284b177ecafbc71 subpackages: - assert - require diff --git a/glide.yaml b/glide.yaml index 3923b1cdd..974b3856a 100644 --- a/glide.yaml +++ b/glide.yaml @@ -1,21 +1,19 @@ package: github.com/tendermint/abci import: - package: github.com/gogo/protobuf - version: v0.5 + version: ^1.0.0 subpackages: - proto - package: github.com/spf13/cobra version: v0.0.1 - package: github.com/tendermint/go-crypto - version: sdk2 + version: develop - package: github.com/tendermint/go-wire - version: sdk2 - subpackages: - - data + version: develop - package: github.com/tendermint/iavl - version: sdk2 + version: develop - package: github.com/tendermint/tmlibs - version: sdk2 + version: develop subpackages: - common - db From d2845d923b870e9f4656a7e05c669e62ba489115 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Sat, 3 Feb 2018 00:11:20 -0500 Subject: [PATCH 3/4] add more versions to glide --- glide.lock | 6 +++--- glide.yaml | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/glide.lock b/glide.lock index dc9ca4774..c4b7c8125 100644 --- a/glide.lock +++ b/glide.lock @@ -1,5 +1,5 @@ -hash: e064ab92feb559882cff91eac455ae0425b5704d83998798ec6d36544c52aa17 -updated: 2018-02-03T00:02:35.741382486-05:00 +hash: faee2e6d7d388ab8c0425f97b3c628bc952e72b76c9d233762a69071c4819e44 +updated: 2018-02-03T00:14:01.357884929-05:00 imports: - name: github.com/btcsuite/btcd version: 2e60448ffcc6bf78332d1fe590260095f554dd78 @@ -75,7 +75,7 @@ imports: - name: github.com/tendermint/go-wire version: dec83f641903b22f039da3974607859715d0377e - name: github.com/tendermint/iavl - version: bbf92e0e58351b4970ac4d8a8f3255be453a2147 + version: 1a59ec0c82dc940c25339dd7c834df5cb76a95cb - name: github.com/tendermint/tmlibs version: 1d7fc78ea171587e9e63da566d3da1b127bfd14c subpackages: diff --git a/glide.yaml b/glide.yaml index 974b3856a..c0b23c037 100644 --- a/glide.yaml +++ b/glide.yaml @@ -4,6 +4,8 @@ import: version: ^1.0.0 subpackages: - proto +- package: github.com/pkg/errors + version: v0.8.0 - package: github.com/spf13/cobra version: v0.0.1 - package: github.com/tendermint/go-crypto @@ -26,6 +28,7 @@ import: version: v1.7.3 testImport: - package: github.com/stretchr/testify + version: v1.2.1 subpackages: - assert - require From 4450a20bde136c1ed462001073abe7253f8c934b Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Sat, 3 Feb 2018 00:24:48 -0500 Subject: [PATCH 4/4] types: check bufio.Reader --- types/messages.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/types/messages.go b/types/messages.go index be49461ad..2a7568d9f 100644 --- a/types/messages.go +++ b/types/messages.go @@ -28,7 +28,11 @@ func ReadMessage(r io.Reader, msg proto.Message) error { } func readProtoMsg(r io.Reader, msg proto.Message, maxSize int) error { - reader := bufio.NewReader(r) + // binary.ReadVarint takes an io.ByteReader, eg. a bufio.Reader + reader, ok := r.(*bufio.Reader) + if !ok { + reader = bufio.NewReader(r) + } length64, err := binary.ReadVarint(reader) if err != nil { return err