fix: DiffCollectionsMigration hash function not used correctly (#17143)

This commit is contained in:
Facundo Medica 2023-07-26 18:28:13 +02:00 committed by GitHub
parent 7daf40a270
commit 153af4c755
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 57 additions and 3 deletions

View File

@ -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

View File

@ -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)
}