Fix Module leak in REPL

extensions
Volodymyr Shymanskyy 3 years ago
parent 0c13c3e550
commit 2a06524dd4

@ -92,7 +92,7 @@ M3Result link_all (IM3Module module)
return res; return res;
} }
const char* moduleNameFromFn(const char* fn) const char* modname_from_fn(const char* fn)
{ {
const char* off = strrchr(fn, '/'); const char* off = strrchr(fn, '/');
if (off) return off+1; if (off) return off+1;
@ -104,6 +104,7 @@ const char* moduleNameFromFn(const char* fn)
M3Result repl_load (const char* fn) M3Result repl_load (const char* fn)
{ {
M3Result result = m3Err_none; M3Result result = m3Err_none;
IM3Module module = NULL;
u8* wasm = NULL; u8* wasm = NULL;
u32 fsize = 0; u32 fsize = 0;
@ -137,14 +138,13 @@ M3Result repl_load (const char* fn)
fclose (f); fclose (f);
f = NULL; f = NULL;
IM3Module module;
result = m3_ParseModule (env, &module, wasm, fsize); result = m3_ParseModule (env, &module, wasm, fsize);
if (result) goto on_error; if (result) goto on_error;
result = m3_LoadModule (runtime, module); result = m3_LoadModule (runtime, module);
if (result) goto on_error; if (result) goto on_error;
m3_SetModuleName(module, moduleNameFromFn(fn)); m3_SetModuleName(module, modname_from_fn(fn));
result = link_all (module); result = link_all (module);
if (result) goto on_error; if (result) goto on_error;
@ -154,7 +154,9 @@ M3Result repl_load (const char* fn)
} }
return result; return result;
on_error: on_error:
m3_FreeModule(module);
if (wasm) free(wasm); if (wasm) free(wasm);
if (f) fclose(f); if (f) fclose(f);

Loading…
Cancel
Save