From 5fd529419c9085ebb806a8839edb503317e998c1 Mon Sep 17 00:00:00 2001 From: Nicolas Lara Date: Fri, 24 Feb 2023 17:44:08 +0100 Subject: [PATCH 1/2] checking the checksum before gzipping the file --- x/wasm/client/cli/genesis_msg.go | 7 ++++++- x/wasm/client/cli/gov_tx.go | 24 +++++++++++++----------- x/wasm/client/cli/gov_tx_test.go | 22 ++++++++++++++++++++++ x/wasm/client/cli/tx.go | 14 +++++++------- 4 files changed, 48 insertions(+), 19 deletions(-) diff --git a/x/wasm/client/cli/genesis_msg.go b/x/wasm/client/cli/genesis_msg.go index b6b1321aee..4f86aaf4d8 100644 --- a/x/wasm/client/cli/genesis_msg.go +++ b/x/wasm/client/cli/genesis_msg.go @@ -7,6 +7,7 @@ import ( "encoding/json" "errors" "fmt" + "os" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -53,7 +54,11 @@ func GenesisStoreCodeCmd(defaultNodeHome string, genesisMutator GenesisMutator) return err } - msg, err := parseStoreCodeArgs(args[0], senderAddr, cmd.Flags()) + wasmFile, err := os.ReadFile(args[0]) + if err != nil { + return err + } + msg, err := parseStoreCodeArgs(wasmFile, senderAddr, cmd.Flags()) if err != nil { return err } diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index 3c8a7b9f3a..c4ab099510 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -5,6 +5,7 @@ import ( "crypto/sha256" "fmt" "net/url" + "os" "strconv" "strings" @@ -34,7 +35,12 @@ func ProposalStoreCodeCmd() *cobra.Command { return err } - src, err := parseStoreCodeArgs(args[0], clientCtx.FromAddress, cmd.Flags()) + wasmFile, err := os.ReadFile(args[0]) + source, builder, codeHash, err := parseVerificationFlags(wasmFile, cmd.Flags()) + if err != nil { + return err + } + src, err := parseStoreCodeArgs(wasmFile, clientCtx.FromAddress, cmd.Flags()) if err != nil { return err } @@ -51,10 +57,6 @@ func ProposalStoreCodeCmd() *cobra.Command { return err } - source, builder, codeHash, err := parseVerificationFlags(src.WASMByteCode, cmd.Flags()) - if err != nil { - return err - } content := types.StoreCodeProposal{ Title: proposalTitle, Description: proposalDescr, @@ -211,7 +213,12 @@ func ProposalStoreAndInstantiateContractCmd() *cobra.Command { return err } - src, err := parseStoreCodeArgs(args[0], clientCtx.FromAddress, cmd.Flags()) + wasmFile, err := os.ReadFile(args[0]) + source, builder, codeHash, err := parseVerificationFlags(wasmFile, cmd.Flags()) + if err != nil { + return err + } + src, err := parseStoreCodeArgs(wasmFile, clientCtx.FromAddress, cmd.Flags()) if err != nil { return err } @@ -228,11 +235,6 @@ func ProposalStoreAndInstantiateContractCmd() *cobra.Command { return err } - source, builder, codeHash, err := parseVerificationFlags(src.WASMByteCode, cmd.Flags()) - if err != nil { - return err - } - amountStr, err := cmd.Flags().GetString(flagAmount) if err != nil { return fmt.Errorf("amount: %s", err) diff --git a/x/wasm/client/cli/gov_tx_test.go b/x/wasm/client/cli/gov_tx_test.go index 147b9f61b1..3b900bcd7f 100644 --- a/x/wasm/client/cli/gov_tx_test.go +++ b/x/wasm/client/cli/gov_tx_test.go @@ -1,6 +1,7 @@ package cli import ( + sdk "github.com/cosmos/cosmos-sdk/types" "os" "testing" @@ -156,3 +157,24 @@ func TestParseCodeInfoFlags(t *testing.T) { }) } } + +func TestChecksumGzipInteraction(t *testing.T) { + correctSource := "https://github.com/CosmWasm/wasmd/blob/main/x/wasm/keeper/testdata/hackatom.wasm" + correctBuilderRef := "cosmwasm/workspace-optimizer:0.12.9" + + fileName := "../../keeper/testdata/hackatom.wasm" + wasmFile, err := os.ReadFile(fileName) + require.NoError(t, err) + + checksumStr := "13a1fc994cc6d1c81b746ee0c0ff6f90043875e0bf1d9be6b7d779fc978dc2a5" + args := []string{"--code-source-url=" + correctSource, "--builder=" + correctBuilderRef, "--code-hash=" + checksumStr} + + flags := ProposalStoreCodeCmd().Flags() + require.NoError(t, flags.Parse(args)) + _, _, _, err = parseVerificationFlags(wasmFile, flags) + require.NoError(t, err) + msg, err := parseStoreCodeArgs(wasmFile, sdk.AccAddress{}, flags) + require.NoError(t, err) + _, _, _, err = parseVerificationFlags(msg.WASMByteCode, flags) + require.Error(t, err) +} diff --git a/x/wasm/client/cli/tx.go b/x/wasm/client/cli/tx.go index 7d7770d086..869ff8ab1e 100644 --- a/x/wasm/client/cli/tx.go +++ b/x/wasm/client/cli/tx.go @@ -81,7 +81,11 @@ func StoreCodeCmd() *cobra.Command { if err != nil { return err } - msg, err := parseStoreCodeArgs(args[0], clientCtx.GetFromAddress(), cmd.Flags()) + wasmFile, err := os.ReadFile(args[0]) + if err != nil { + return err + } + msg, err := parseStoreCodeArgs(wasmFile, clientCtx.GetFromAddress(), cmd.Flags()) if err != nil { return err } @@ -101,13 +105,9 @@ func StoreCodeCmd() *cobra.Command { return cmd } -func parseStoreCodeArgs(file string, sender sdk.AccAddress, flags *flag.FlagSet) (types.MsgStoreCode, error) { - wasm, err := os.ReadFile(file) - if err != nil { - return types.MsgStoreCode{}, err - } - +func parseStoreCodeArgs(wasm []byte, sender sdk.AccAddress, flags *flag.FlagSet) (types.MsgStoreCode, error) { // gzip the wasm file + var err error if ioutils.IsWasm(wasm) { wasm, err = ioutils.GzipIt(wasm) From e9fb69a42b88a604b48ed1f158769683b1866acd Mon Sep 17 00:00:00 2001 From: Nicolas Lara Date: Fri, 24 Feb 2023 19:32:32 +0100 Subject: [PATCH 2/2] checking the error --- x/wasm/client/cli/gov_tx.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/x/wasm/client/cli/gov_tx.go b/x/wasm/client/cli/gov_tx.go index c4ab099510..8322c22f40 100644 --- a/x/wasm/client/cli/gov_tx.go +++ b/x/wasm/client/cli/gov_tx.go @@ -36,6 +36,9 @@ func ProposalStoreCodeCmd() *cobra.Command { } wasmFile, err := os.ReadFile(args[0]) + if err != nil { + return err + } source, builder, codeHash, err := parseVerificationFlags(wasmFile, cmd.Flags()) if err != nil { return err @@ -214,6 +217,9 @@ func ProposalStoreAndInstantiateContractCmd() *cobra.Command { } wasmFile, err := os.ReadFile(args[0]) + if err != nil { + return err + } source, builder, codeHash, err := parseVerificationFlags(wasmFile, cmd.Flags()) if err != nil { return err