@@ -183,6 +183,62 @@ func TestCreateWithParamPermissions(t *testing.T) {
183183 }
184184}
185185
186+ // ensure that the user cannot set the code instantiate permission to something more permissive
187+ // than the default
188+ func TestEnforceValidPermissionsOnCreate (t * testing.T ) {
189+ ctx , keepers := CreateTestInput (t , false , SupportedFeatures )
190+ keeper := keepers .WasmKeeper
191+ contractKeeper := keepers .ContractKeeper
192+
193+ deposit := sdk .NewCoins (sdk .NewInt64Coin ("denom" , 100000 ))
194+ creator := keepers .Faucet .NewFundedAccount (ctx , deposit ... )
195+
196+ onlyCreator := types .AccessTypeOnlyAddress .With (creator )
197+
198+ specs := map [string ]struct {
199+ defaultPermssion types.AccessType
200+ requestedPermission * types.AccessConfig
201+ // grantedPermission is set iff no error
202+ grantedPermission types.AccessConfig
203+ // expError is nil iff the request is allowed
204+ expError * sdkerrors.Error
205+ }{
206+ "override everybody" : {
207+ defaultPermssion : types .AccessTypeEverybody ,
208+ requestedPermission : & onlyCreator ,
209+ grantedPermission : onlyCreator ,
210+ },
211+ "default to everybody" : {
212+ defaultPermssion : types .AccessTypeEverybody ,
213+ requestedPermission : nil ,
214+ grantedPermission : types.AccessConfig {Permission : types .AccessTypeEverybody },
215+ },
216+ "cannot override nobody" : {
217+ defaultPermssion : types .AccessTypeNobody ,
218+ requestedPermission : & onlyCreator ,
219+ expError : sdkerrors .ErrUnauthorized ,
220+ },
221+ "default to nobody" : {
222+ defaultPermssion : types .AccessTypeNobody ,
223+ requestedPermission : nil ,
224+ grantedPermission : types.AccessConfig {Permission : types .AccessTypeNobody },
225+ },
226+ }
227+ for msg , spec := range specs {
228+ t .Run (msg , func (t * testing.T ) {
229+ params := types .DefaultParams ()
230+ params .InstantiateDefaultPermission = spec .defaultPermssion
231+ keeper .SetParams (ctx , params )
232+ codeID , err := contractKeeper .Create (ctx , creator , hackatomWasm , spec .requestedPermission )
233+ require .True (t , spec .expError .Is (err ), err )
234+ if spec .expError == nil {
235+ codeInfo := keeper .GetCodeInfo (ctx , codeID )
236+ require .Equal (t , codeInfo .InstantiateConfig , spec .grantedPermission )
237+ }
238+ })
239+ }
240+ }
241+
186242func TestCreateDuplicate (t * testing.T ) {
187243 ctx , keepers := CreateTestInput (t , false , SupportedFeatures )
188244 keeper := keepers .ContractKeeper
0 commit comments