From 47bb475d6d0fe20d035b0332dc6f2a38f6970d1a Mon Sep 17 00:00:00 2001 From: Cyrill Leutwiler <bigcyrill@hotmail.com> Date: Wed, 26 Jul 2023 12:25:11 +0200 Subject: [PATCH] A subtle bug in the bool predicate for checking against chain extension imports prevents importing the non-prefixed version even if chain extension are enabled are enabled (#14642) Signed-off-by: Cyrill Leutwiler <bigcyrill@hotmail.com> --- substrate/frame/contracts/fixtures/chain_extension.wat | 6 +++--- substrate/frame/contracts/src/wasm/prepare.rs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/substrate/frame/contracts/fixtures/chain_extension.wat b/substrate/frame/contracts/fixtures/chain_extension.wat index 7cc7335052e..670f8e70172 100644 --- a/substrate/frame/contracts/fixtures/chain_extension.wat +++ b/substrate/frame/contracts/fixtures/chain_extension.wat @@ -1,7 +1,7 @@ ;; Call chain extension by passing through input and output of this contract (module - (import "seal0" "seal_call_chain_extension" - (func $seal_call_chain_extension (param i32 i32 i32 i32 i32) (result i32)) + (import "seal0" "call_chain_extension" + (func $call_chain_extension (param i32 i32 i32 i32 i32) (result i32)) ) (import "seal0" "seal_input" (func $seal_input (param i32 i32))) (import "seal0" "seal_return" (func $seal_return (param i32 i32 i32))) @@ -30,7 +30,7 @@ (call $seal_input (i32.const 4) (i32.const 0)) ;; the chain extension passes through the input and returns it as output - (call $seal_call_chain_extension + (call $call_chain_extension (i32.load (i32.const 4)) ;; id (i32.const 4) ;; input_ptr (i32.load (i32.const 0)) ;; input_len diff --git a/substrate/frame/contracts/src/wasm/prepare.rs b/substrate/frame/contracts/src/wasm/prepare.rs index 8cd49bd9a19..b129c17e13e 100644 --- a/substrate/frame/contracts/src/wasm/prepare.rs +++ b/substrate/frame/contracts/src/wasm/prepare.rs @@ -168,8 +168,8 @@ impl LoadedModule { let _ = import.ty().func().ok_or("expected a function")?; if !<T as Config>::ChainExtension::enabled() && - import.name().as_bytes() == b"seal_call_chain_extension" || - import.name().as_bytes() == b"call_chain_extension" + (import.name().as_bytes() == b"seal_call_chain_extension" || + import.name().as_bytes() == b"call_chain_extension") { return Err("Module uses chain extensions but chain extensions are disabled") } -- GitLab