From 577076b41e488b12f64a512d2badd5c0254142b1 Mon Sep 17 00:00:00 2001 From: Christoph Otter Date: Tue, 21 Jan 2025 18:51:18 +0100 Subject: [PATCH 1/2] 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 71e14dd57..497cd4e85 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 b3c1e13c4c7a095e86094d2717364d571c1f8cc0 Mon Sep 17 00:00:00 2001 From: Christoph Otter Date: Wed, 22 Jan 2025 12:37:25 +0100 Subject: [PATCH 2/2] 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 1f8a8c581..d7f4bd431 100644 --- a/internal/api/lib_test.go +++ b/internal/api/lib_test.go @@ -186,6 +186,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()