{"record":{"id":"db9869d68cba2cde","repo":"wasmerio/wasmer","slug":"env-memory-import-for-wasm-c-api-module-is-not-a-m","errorCode":null,"errorMessage":"env.memory import for Wasm C API module is not a memory","messagePattern":"env\\.memory import for Wasm C API module is not a memory","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"lib/c-api-imports/src/lib.rs","lineNumber":155,"sourceCode":"        self.validate_supported()?;\n        if self.version.is_none() {\n            return Ok(());\n        }\n\n        let func_env = FunctionEnv::new(\n            &mut *store,\n            WasmCapiEnv {\n                resolve_module_sync: self.resolve_module_sync.clone(),\n                ..WasmCapiEnv::default()\n            },\n        );\n        self.func_env = Some(func_env.clone());\n        register_wasm_c_api_imports(store, &func_env, io);\n\n        if let Some(memory_type) = self.imported_memory_type {\n            if let Some(existing) = io.get_export(\"env\", \"memory\") {\n                let Extern::Memory(memory) = existing else {\n                    bail!(\"env.memory import for Wasm C API module is not a memory\");\n                };\n                self.set_memory(store, &memory)?;\n            } else {\n                let memory = Memory::new(&mut *store, memory_type)?;\n                io.define(\"env\", \"memory\", memory.clone());\n                self.set_memory(store, &memory)?;\n            }\n        }\n\n        if let Some(table_type) = self.imported_table_type {\n            if let Some(existing) = io.get_export(\"env\", \"__indirect_function_table\") {\n                let Extern::Table(table) = existing else {\n                    bail!(\n                        \"env.__indirect_function_table import for Wasm C API module is not a table\"\n                    );\n                };\n                self.set_table(store, &table)?;\n            } else {","sourceCodeStart":137,"sourceCodeEnd":173,"githubUrl":"https://github.com/wasmerio/wasmer/blob/8c4b9ee9d33fb2068863fbb3d328683e7e6ff7f5/lib/c-api-imports/src/lib.rs#L137-L173","documentation":"When the Wasm C API module requires an imported memory `env.memory`, register_imports checks whether the module instance already exports something under (\"env\",\"memory\"). If that export exists but is not an Extern::Memory, the type contract is violated and it bails instead of coercing. The C API state needs a real Memory handle to operate.","triggerScenarios":"Instantiating a module with an `env.memory` import while the imports object already defines \"env.memory\" as a function/table/global (anything but a Memory), then calling add_imports.","commonSituations":"Name collision: a host function registered as env.memory; a stale/wrong import defined earlier in the same Imports set; mixing two modules' import sets where one's memory name matches the other's export of a different kind.","solutions":["Ensure the \"env\" \"memory\" export in the Imports object is an actual Memory instance","Rename/remove the conflicting non-memory export registered under (\"env\",\"memory\")","Let Wasmer create the memory by not pre-defining env.memory (it will allocate Memory::new with the module's declared type)"],"exampleFix":"// before\nio.define(\"env\", \"memory\", host_func.clone()); // function, not memory\n// after\nlet mem = Memory::new(&mut store, memory_type)?;\nio.define(\"env\", \"memory\", mem);","handlingStrategy":"validation","validationCode":"if let Some(Extern::Memory(_)) = io.get_export(\"env\", \"memory\") { /* ok */ } else if io.get_export(\"env\", \"memory\").is_some() {\n    return Err(\"env.memory is defined but not a Memory\");\n}","typeGuard":"fn is_memory_export(e: Option<&Extern>) -> bool {\n    matches!(e, Some(Extern::Memory(_)))\n}","tryCatchPattern":"match result {\n    Err(e) if e.to_string().contains(\"is not a memory\") => fix_env_memory_import_and_retry(),\n    other => other?,\n}","preventionTips":["Never define env.memory as anything but a Memory in your Imports set","Reserve the env.memory name for the memory import when using C API modules","Audit shared import sets for name collisions before add_imports"],"tags":["wasm","c-api","imports","memory","type-mismatch"],"backgroundTag":"import-type-mismatch","analyzedSha":"8c4b9ee9d33fb2068863fbb3d328683e7e6ff7f5","analyzedAt":"2026-09-01T23:06:31.009Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T06:17:21.866Z"}