From 647fd3141a66ece0682ec8de657b54791fc03571 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 --- 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 2b71adc1c..ab78c8197 100644 --- a/internal/api/lib.go +++ b/internal/api/lib.go @@ -101,7 +101,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 2481812d6afcf480abfc8b8808579674d39854b4 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 --- 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 90c55a8c2..4ced04b07 100644 --- a/internal/api/lib_test.go +++ b/internal/api/lib_test.go @@ -274,6 +274,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()