Merge pull request #1354 from CosmWasm/1342_error_msg
More verbose error message
This commit is contained in:
@@ -5,13 +5,15 @@ import (
|
||||
"compress/gzip"
|
||||
"io"
|
||||
|
||||
errorsmod "cosmossdk.io/errors"
|
||||
|
||||
"github.com/CosmWasm/wasmd/x/wasm/types"
|
||||
)
|
||||
|
||||
// Uncompress expects a valid gzip source to unpack or fails. See IsGzip
|
||||
func Uncompress(gzipSrc []byte, limit uint64) ([]byte, error) {
|
||||
if uint64(len(gzipSrc)) > limit {
|
||||
return nil, types.ErrLimit
|
||||
return nil, types.ErrLimit.Wrapf("max %d bytes", limit)
|
||||
}
|
||||
zr, err := gzip.NewReader(bytes.NewReader(gzipSrc))
|
||||
if err != nil {
|
||||
@@ -19,7 +21,11 @@ func Uncompress(gzipSrc []byte, limit uint64) ([]byte, error) {
|
||||
}
|
||||
zr.Multistream(false)
|
||||
defer zr.Close()
|
||||
return io.ReadAll(LimitReader(zr, int64(limit)))
|
||||
bz, err := io.ReadAll(LimitReader(zr, int64(limit)))
|
||||
if types.ErrLimit.Is(err) {
|
||||
return nil, errorsmod.Wrapf(err, "max %d bytes", limit)
|
||||
}
|
||||
return bz, err
|
||||
}
|
||||
|
||||
// LimitReader returns a Reader that reads from r
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"errors"
|
||||
"github.com/cometbft/cometbft/libs/rand"
|
||||
"io"
|
||||
"os"
|
||||
"testing"
|
||||
@@ -52,8 +53,8 @@ func TestUncompress(t *testing.T) {
|
||||
src: asGzip(bytes.Repeat([]byte{0x1}, maxSize+1)),
|
||||
expError: types.ErrLimit,
|
||||
},
|
||||
"handle other big gzip output": {
|
||||
src: asGzip(bytes.Repeat([]byte{0x1}, 2*maxSize)),
|
||||
"handle big gzip archive": {
|
||||
src: asGzip(rand.Bytes(2 * maxSize)),
|
||||
expError: types.ErrLimit,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -172,7 +172,7 @@ func (k Keeper) create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte,
|
||||
ctx.GasMeter().ConsumeGas(k.gasRegister.UncompressCosts(len(wasmCode)), "Uncompress gzip bytecode")
|
||||
wasmCode, err = ioutils.Uncompress(wasmCode, uint64(types.MaxWasmSize))
|
||||
if err != nil {
|
||||
return 0, checksum, errorsmod.Wrap(types.ErrCreateFailed, err.Error())
|
||||
return 0, checksum, types.ErrCreateFailed.Wrap(errorsmod.Wrap(err, "uncompress wasm archive").Error())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -214,7 +214,7 @@ func (k Keeper) importCode(ctx sdk.Context, codeID uint64, codeInfo types.CodeIn
|
||||
var err error
|
||||
wasmCode, err = ioutils.Uncompress(wasmCode, uint64(types.MaxWasmSize))
|
||||
if err != nil {
|
||||
return errorsmod.Wrap(types.ErrCreateFailed, err.Error())
|
||||
return types.ErrCreateFailed.Wrap(errorsmod.Wrap(err, "uncompress wasm archive").Error())
|
||||
}
|
||||
}
|
||||
newCodeHash, err := k.wasmVM.Create(wasmCode)
|
||||
|
||||
Reference in New Issue
Block a user