From 153af4c755c4b6eb4a97c0845bf1247636f26442 Mon Sep 17 00:00:00 2001 From: Facundo Medica <14063057+facundomedica@users.noreply.github.com> Date: Wed, 26 Jul 2023 18:28:13 +0200 Subject: [PATCH] fix: DiffCollectionsMigration hash function not used correctly (#17143) --- testutil/collections.go | 6 ++-- testutil/collections_test.go | 54 ++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 testutil/collections_test.go diff --git a/testutil/collections.go b/testutil/collections.go index 2354943de77a..82ef1858d3bd 100644 --- a/testutil/collections.go +++ b/testutil/collections.go @@ -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 diff --git a/testutil/collections_test.go b/testutil/collections_test.go new file mode 100644 index 000000000000..a35533539efc --- /dev/null +++ b/testutil/collections_test.go @@ -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) +}