Update logic and fix genesis test

This commit is contained in:
Ethan Frey
2020-03-02 15:48:13 +01:00
parent 10aea17a75
commit 188d156122
3 changed files with 30 additions and 16 deletions

View File

@@ -71,7 +71,7 @@ func TestInitGenesis(t *testing.T) {
Sender: creator,
WASMByteCode: testContract,
Source: "https://github.com/cosmwasm/wasmd/blob/master/x/wasm/testdata/escrow.wasm",
Builder: "cosmwasm-opt:0.5.2",
Builder: "confio/cosmwasm-opt:0.7.0",
}
err = msg.ValidateBasic()
require.NoError(t, err)

View File

@@ -15,8 +15,10 @@ const (
// MaxLabelSize is the longest label that can be used when Instantiating a contract
MaxLabelSize = 128
// BuildTagRegexp is a docker image regexp. We remove support for non-standard registries for simplicity.
// https://docs.docker.com/engine/reference/commandline/tag/#extended-description
// BuildTagRegexp is a docker image regexp.
// We only support max 128 characters, with at least one organization name (subset of all legal names).
//
// Details from https://docs.docker.com/engine/reference/commandline/tag/#extended-description :
//
// An image name is made up of slash-separated name components (optionally prefixed by a registry hostname).
// Name components may contain lowercase characters, digits and separators.
@@ -24,7 +26,9 @@ const (
//
// A tag name must be valid ASCII and may contain lowercase and uppercase letters, digits, underscores, periods and dashes.
// A tag name may not start with a period or a dash and may contain a maximum of 128 characters.
BuildTagRegexp = "^[a-z0-9][a-z0-9._-]*[a-z0-9](/[a-z0-9][a-z0-9._-]*[a-z0-9])*:[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,127}$"
BuildTagRegexp = "^[a-z0-9][a-z0-9._-]*[a-z0-9](/[a-z0-9][a-z0-9._-]*[a-z0-9])+:[a-zA-Z0-9_][a-zA-Z0-9_.-]*$"
MaxBuildTagSize = 128
)
type MsgStoreCode struct {
@@ -71,14 +75,7 @@ func (msg MsgStoreCode) ValidateBasic() error {
}
}
if msg.Builder != "" {
ok, err := regexp.MatchString(BuildTagRegexp, msg.Builder)
if err != nil || !ok {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "invalid tag supplied for builder")
}
}
return nil
return validateBuilder(msg.Builder)
}
func (msg MsgStoreCode) GetSignBytes() []byte {
@@ -89,6 +86,21 @@ func (msg MsgStoreCode) GetSigners() []sdk.AccAddress {
return []sdk.AccAddress{msg.Sender}
}
func validateBuilder(buildTag string) error {
if len(buildTag) > MaxBuildTagSize {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "builder tag longer than 128 characters")
}
if buildTag != "" {
ok, err := regexp.MatchString(BuildTagRegexp, buildTag)
if err != nil || !ok {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "invalid tag supplied for builder")
}
}
return nil
}
type MsgInstantiateContract struct {
Sender sdk.AccAddress `json:"sender" yaml:"sender"`
Code uint64 `json:"code_id" yaml:"code_id"`

View File

@@ -1,7 +1,6 @@
package types
import (
"regexp"
"strings"
"testing"
@@ -26,9 +25,12 @@ func TestBuilderRegexp(t *testing.T) {
for name, tc := range cases {
t.Run(name, func(t *testing.T) {
ok, err := regexp.MatchString(BuildTagRegexp, tc.example)
assert.NoError(t, err)
assert.Equal(t, tc.valid, ok)
err := validateBuilder(tc.example)
if tc.valid {
assert.NoError(t, err)
} else {
assert.Error(t, err)
}
})
}