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) } 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()