diff --git a/core/iwasm/runtime/vmcore-wasm/wasm_loader.c b/core/iwasm/runtime/vmcore-wasm/wasm_loader.c index c03ddc3a31..debdb256e0 100644 --- a/core/iwasm/runtime/vmcore-wasm/wasm_loader.c +++ b/core/iwasm/runtime/vmcore-wasm/wasm_loader.c @@ -1335,6 +1335,18 @@ create_sections(const uint8 *buf, uint32 size, return true; } +static void +exchange32(uint8* p_data) +{ + uint8 value = *p_data; + *p_data = *(p_data + 3); + *(p_data + 3) = value; + + value = *(p_data + 1); + *(p_data + 1) = *(p_data + 2); + *(p_data + 2) = value; +} + static bool load(const uint8 *buf, uint32 size, WASMModule *module, char *error_buf, uint32 error_buf_size) @@ -1345,13 +1357,21 @@ load(const uint8 *buf, uint32 size, WASMModule *module, WASMSection *section_list = NULL; CHECK_BUF(p, p_end, sizeof(uint32)); - if ((magic_number = read_uint32(p)) != WASM_MAGIC_NUMBER) { + magic_number = read_uint32(p); + if (!is_little_endian) + exchange32((uint8*)&magic_number); + + if (magic_number != WASM_MAGIC_NUMBER) { set_error_buf(error_buf, error_buf_size, "magic header not detected"); return false; } CHECK_BUF(p, p_end, sizeof(uint32)); - if ((version = read_uint32(p)) != WASM_CURRENT_VERSION) { + version = read_uint32(p); + if (!is_little_endian) + exchange32((uint8*)&version); + + if (version != WASM_CURRENT_VERSION) { set_error_buf(error_buf, error_buf_size, "unknown binary version"); return false; }