Browse Source

block: fix max commit sig size (#5567)

pull/5570/head
Callum Waters 4 years ago
parent
commit
c4f1b2d7db
4 changed files with 21 additions and 27 deletions
  1. +1
    -0
      CHANGELOG_PENDING.md
  2. +2
    -2
      state/tx_filter_test.go
  3. +4
    -2
      types/block.go
  4. +14
    -23
      types/block_test.go

+ 1
- 0
CHANGELOG_PENDING.md View File

@ -30,3 +30,4 @@ Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermi
- [abci/grpc] \#5520 Return async responses in order, to avoid mempool panics. (@erikgrinaker)
- [blockchain/v2] \#5530 Fix "processed height 4541 but expected height 4540" panic (@melekes)
- [consensus/wal] Fix WAL autorepair by opening target WAL in read/write mode (@erikgrinaker)
- [block] \#5567 Fix MaxCommitSigBytes (@cmwaters)

+ 2
- 2
state/tx_filter_test.go View File

@ -25,8 +25,8 @@ func TestTxFilter(t *testing.T) {
tx types.Tx
isErr bool
}{
{types.Tx(tmrand.Bytes(2187)), false},
{types.Tx(tmrand.Bytes(2188)), true},
{types.Tx(tmrand.Bytes(2155)), false},
{types.Tx(tmrand.Bytes(2156)), true},
{types.Tx(tmrand.Bytes(3000)), true},
}


+ 4
- 2
types/block.go View File

@ -24,6 +24,8 @@ import (
const (
// MaxHeaderBytes is a maximum header size.
// NOTE: Because app hash can be of arbitrary size, the header is therefore not
// capped in size and thus this number should be seen as a soft max
MaxHeaderBytes int64 = 626
// MaxOverheadForBlock - maximum overhead to encode a block (up to
@ -583,9 +585,9 @@ const (
const (
// Max size of commit without any commitSigs -> 82 for BlockID, 8 for Height, 4 for Round.
MaxCommitOverheadBytes int64 = 94
// Commit sig size is made up of 32 bytes for the signature, 20 bytes for the address,
// Commit sig size is made up of 64 bytes for the signature, 20 bytes for the address,
// 1 byte for the flag and 14 bytes for the timestamp
MaxCommitSigBytes int64 = 77
MaxCommitSigBytes int64 = 109
)
// CommitSig is a part of the Vote included in a Commit.


+ 14
- 23
types/block_test.go View File

@ -257,33 +257,22 @@ func TestCommitValidateBasic(t *testing.T) {
}
}
func TestMaxCommitSigBytes(t *testing.T) {
func TestMaxCommitBytes(t *testing.T) {
// time is varint encoded so need to pick the max.
// year int, month Month, day, hour, min, sec, nsec int, loc *Location
timestamp := time.Date(math.MaxInt64, 0, 0, 0, 0, 0, math.MaxInt64, time.UTC)
cs := &CommitSig{
BlockIDFlag: BlockIDFlagNil,
ValidatorAddress: crypto.AddressHash([]byte("validator_address")),
Timestamp: timestamp,
Signature: tmhash.Sum([]byte("signature")),
}
pb := cs.ToProto()
assert.EqualValues(t, MaxCommitSigBytes, pb.Size())
}
func TestMaxCommitBytes(t *testing.T) {
timestamp := time.Date(math.MaxInt64, 0, 0, 0, 0, 0, math.MaxInt64, time.UTC)
cs := CommitSig{
BlockIDFlag: BlockIDFlagNil,
ValidatorAddress: crypto.AddressHash([]byte("validator_address")),
Timestamp: timestamp,
Signature: tmhash.Sum([]byte("signature")),
Signature: crypto.CRandBytes(MaxSignatureSize),
}
pbSig := cs.ToProto()
// test that a single commit sig doesn't exceed max commit sig bytes
assert.EqualValues(t, MaxCommitSigBytes, pbSig.Size())
// check size with a single commit
commit := &Commit{
Height: math.MaxInt64,
@ -463,9 +452,11 @@ func TestBlockMaxDataBytes(t *testing.T) {
}{
0: {-10, 1, 0, true, 0},
1: {10, 1, 0, true, 0},
2: {809, 1, 0, true, 0},
3: {810, 1, 0, false, 0},
4: {811, 1, 0, false, 1},
2: {841, 1, 0, true, 0},
3: {842, 1, 0, false, 0},
4: {843, 1, 0, false, 1},
5: {954, 2, 0, false, 1},
6: {1053, 2, 100, false, 0},
}
for i, tc := range testCases {
@ -492,9 +483,9 @@ func TestBlockMaxDataBytesNoEvidence(t *testing.T) {
}{
0: {-10, 1, true, 0},
1: {10, 1, true, 0},
2: {809, 1, true, 0},
3: {810, 1, false, 0},
4: {811, 1, false, 1},
2: {841, 1, true, 0},
3: {842, 1, false, 0},
4: {843, 1, false, 1},
}
for i, tc := range testCases {


Loading…
Cancel
Save