From 0caab74f6ad21b3c5c77453046d116a315e01234 Mon Sep 17 00:00:00 2001 From: Christoph Otter Date: Tue, 21 Jan 2025 18:51:18 +0100 Subject: [PATCH 1/3] Fix unchecked flag (cherry picked from commit 647fd3141a66ece0682ec8de657b54791fc03571) --- internal/api/lib.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/lib.go b/internal/api/lib.go index 7b0f473c0..f6d9cedab 100644 --- a/internal/api/lib.go +++ b/internal/api/lib.go @@ -100,7 +100,7 @@ func StoreCodeUnchecked(cache Cache, wasm []byte) ([]byte, error) { w := makeView(wasm) defer runtime.KeepAlive(wasm) errmsg := uninitializedUnmanagedVector() - checksum, err := C.store_code(cache.ptr, w, cbool(true), cbool(true), &errmsg) + checksum, err := C.store_code(cache.ptr, w, cbool(false), cbool(true), &errmsg) if err != nil { return nil, errorWithMessage(err, errmsg) } From 16a4a03d42b5361f72a0702bbbb0d9a66d03df18 Mon Sep 17 00:00:00 2001 From: Christoph Otter Date: Wed, 22 Jan 2025 12:37:25 +0100 Subject: [PATCH 2/3] Add test for StoreCodeUnchecked (cherry picked from commit 2481812d6afcf480abfc8b8808579674d39854b4) --- internal/api/lib_test.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/internal/api/lib_test.go b/internal/api/lib_test.go index 4d9cbe4c0..3f6423792 100644 --- a/internal/api/lib_test.go +++ b/internal/api/lib_test.go @@ -185,6 +185,28 @@ func TestStoreCodeUnchecked(t *testing.T) { require.Equal(t, wasm, code) } +func TestStoreCodeUncheckedWorksWithInvalidWasm(t *testing.T) { + cache, cleanup := withCache(t) + defer cleanup() + + wasm, err := os.ReadFile("../../testdata/hackatom.wasm") + require.NoError(t, err) + + // Look for "interface_version_8" in the wasm file and replace it with "interface_version_9". + // This makes the wasm file invalid. + wasm = bytes.Replace(wasm, []byte("interface_version_8"), []byte("interface_version_9"), 1) + + // StoreCode should fail + _, err = StoreCode(cache, wasm, true) + require.ErrorContains(t, err, "Wasm contract has unknown interface_version_* marker export") + + // StoreCodeUnchecked should not fail + checksum, err := StoreCodeUnchecked(cache, wasm) + require.NoError(t, err) + expectedChecksum := sha256.Sum256(wasm) + assert.Equal(t, expectedChecksum[:], checksum) +} + func TestPin(t *testing.T) { cache, cleanup := withCache(t) defer cleanup() From c6985ed2b3b63c50fd3182b80ad42635c74393fa Mon Sep 17 00:00:00 2001 From: Christoph Otter Date: Wed, 22 Jan 2025 15:32:51 +0100 Subject: [PATCH 3/3] Fix import --- internal/api/lib_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/api/lib_test.go b/internal/api/lib_test.go index 3f6423792..a273e1b28 100644 --- a/internal/api/lib_test.go +++ b/internal/api/lib_test.go @@ -1,6 +1,7 @@ package api import ( + "bytes" "crypto/sha256" "encoding/hex" "encoding/json"