diff --git a/core/iwasm/libraries/libc-emcc/libc_emcc_wrapper.c b/core/iwasm/libraries/libc-emcc/libc_emcc_wrapper.c index 3bb6bc6b76..89ffeaaa4f 100644 --- a/core/iwasm/libraries/libc-emcc/libc_emcc_wrapper.c +++ b/core/iwasm/libraries/libc-emcc/libc_emcc_wrapper.c @@ -245,14 +245,21 @@ mmap_wrapper(wasm_exec_env_t exec_env, void *addr, int length, int prot, if (buf_offset == 0) return -1; - if (fd <= 0) + if (fd <= 0) { + module_free((uint64)buf_offset); return -1; + } - if (lseek(fd, offset, SEEK_SET) == -1) + if (lseek(fd, offset, SEEK_SET) == -1) { + module_free((uint64)buf_offset); return -1; + } size_read = read(fd, buf, length); - (void)size_read; + if (size_read < 0) { + module_free((uint64)buf_offset); + return -1; + } return buf_offset; }