Skip to content

Commit

Permalink
fix: DiffCollectionsMigration hash function not used correctly (#17143)
Browse files Browse the repository at this point in the history
  • Loading branch information
facundomedica committed Jul 26, 2023
1 parent 7daf40a commit 153af4c
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 3 deletions.
6 changes: 3 additions & 3 deletions testutil/collections.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@ func DiffCollectionsMigration(
h.Write(it.Value())
}

hash := sha256.Sum256(nil)
if hex.EncodeToString(hash[:]) != targetHash {
return fmt.Errorf("hashes don't match: %s != %s", hex.EncodeToString(hash[:]), targetHash)
hash := h.Sum(nil)
if hex.EncodeToString(hash) != targetHash {
return fmt.Errorf("hashes don't match: %s != %s", hex.EncodeToString(hash), targetHash)
}

return nil
Expand Down
54 changes: 54 additions & 0 deletions testutil/collections_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package testutil_test

import (
"testing"

"github.com/stretchr/testify/require"

storetypes "cosmossdk.io/store/types"

"github.com/cosmos/cosmos-sdk/testutil"
)

func TestDiffCollectionsMigration(t *testing.T) {
key := storetypes.NewKVStoreKey("test")
ctx := testutil.DefaultContext(key, storetypes.NewTransientStoreKey("transient"))

// First try with some invalid hash
err := testutil.DiffCollectionsMigration(
ctx,
key,
5,
func(i int64) {
ctx.KVStore(key).Set([]byte{byte(i)}, []byte{byte(i)})
},
"abcdef0123456789",
)
require.Error(t, err)

// Now reset and try with the correct hash
ctx = testutil.DefaultContext(key, storetypes.NewTransientStoreKey("transient"))
err = testutil.DiffCollectionsMigration(
ctx,
key,
5,
func(i int64) {
ctx.KVStore(key).Set([]byte{byte(i)}, []byte{byte(i)})
},
"79541ed9da9c16cb7a1d43d5a3d5f6ee31a873c85a6cb4334fb99e021ee0e556",
)
require.NoError(t, err)

// Change the data a little and it will result in an error
ctx = testutil.DefaultContext(key, storetypes.NewTransientStoreKey("transient"))
err = testutil.DiffCollectionsMigration(
ctx,
key,
5,
func(i int64) {
ctx.KVStore(key).Set([]byte{byte(i)}, []byte{byte(i + 1)})
},
"79541ed9da9c16cb7a1d43d5a3d5f6ee31a873c85a6cb4334fb99e021ee0e556",
)
require.Error(t, err)
}

0 comments on commit 153af4c

Please sign in to comment.