Skip to content

Commit

Permalink
Limit TxID to 255 bytes and add test for it
Browse files Browse the repository at this point in the history
  • Loading branch information
bruce-riley committed Jan 21, 2025
1 parent 068574a commit 916e370
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
6 changes: 3 additions & 3 deletions node/pkg/common/chainlock.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,10 @@ const minMsgLength = 88 // Marshalled length with empty payload
func (msg *MessagePublication) Marshal() ([]byte, error) {
buf := new(bytes.Buffer)

if len(msg.TxID) > math.MaxUint32 {
if len(msg.TxID) > math.MaxUint8 {
return nil, fmt.Errorf("TxID too long")
}
vaa.MustWrite(buf, binary.BigEndian, uint32(len(msg.TxID)))
vaa.MustWrite(buf, binary.BigEndian, uint8(len(msg.TxID)))
buf.Write(msg.TxID)

vaa.MustWrite(buf, binary.BigEndian, uint32(msg.Timestamp.Unix()))
Expand Down Expand Up @@ -138,7 +138,7 @@ func UnmarshalMessagePublication(data []byte) (*MessagePublication, error) {

reader := bytes.NewReader(data[:])

txIdLen := uint32(0)
txIdLen := uint8(0)
if err := binary.Read(reader, binary.BigEndian, &txIdLen); err != nil {
return nil, fmt.Errorf("failed to read TxID len: %w", err)
}
Expand Down
22 changes: 22 additions & 0 deletions node/pkg/common/chainlock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,28 @@ func TestSerializeAndDeserializeOfMessagePublicationWithArbitraryTxID(t *testing
assert.Equal(t, payload1, payload2)
}

func TestTxIDStringTooLongShouldFail(t *testing.T) {
tokenBridgeAddress, err := vaa.StringToAddress("0x707f9118e33a9b8998bea41dd0d46f38bb963fc8")
require.NoError(t, err)

// This is limited to 255. Make it 256 and the marshal should fail.
txID := []byte("0123456789012345678901234567890123456789012345678901234567890123012345678901234567890123456789012345678901234567890123456789012301234567890123456789012345678901234567890123456789012345678901230123456789012345678901234567890123456789012345678901234567890123")

msg := &MessagePublication{
TxID: txID,
Timestamp: time.Unix(int64(1654516425), 0),
Nonce: 123456,
Sequence: 789101112131415,
EmitterChain: vaa.ChainIDEthereum,
EmitterAddress: tokenBridgeAddress,
Payload: []byte("Hello, World!"),
ConsistencyLevel: 32,
}

_, err = msg.Marshal()
assert.ErrorContains(t, err, "TxID too long")
}

func TestSerializeAndDeserializeOfMessagePublicationWithBigPayload(t *testing.T) {
tokenBridgeAddress, err := vaa.StringToAddress("0x707f9118e33a9b8998bea41dd0d46f38bb963fc8")
require.NoError(t, err)
Expand Down

0 comments on commit 916e370

Please sign in to comment.