diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/binary-reader.cc | 2 | ||||
-rw-r--r-- | src/common.h | 13 | ||||
-rw-r--r-- | src/config.h.in | 2 | ||||
-rw-r--r-- | src/literal.cc | 4 | ||||
-rw-r--r-- | src/resolve-names.cc | 3 | ||||
-rw-r--r-- | src/tools/wasm-interp.cc | 8 | ||||
-rw-r--r-- | src/tools/wasm-link.cc | 8 | ||||
-rw-r--r-- | src/tools/wasm2wast.cc | 8 | ||||
-rw-r--r-- | src/tools/wasmdump.cc | 8 | ||||
-rw-r--r-- | src/tools/wasmopcodecnt.cc | 8 | ||||
-rw-r--r-- | src/tools/wast-desugar.cc | 8 | ||||
-rw-r--r-- | src/tools/wast2wasm.cc | 8 |
12 files changed, 71 insertions, 9 deletions
diff --git a/src/binary-reader.cc b/src/binary-reader.cc index 778c1ed6..4425f6ea 100644 --- a/src/binary-reader.cc +++ b/src/binary-reader.cc @@ -950,6 +950,8 @@ static void read_names_section(Context* ctx, uint32_t section_size) { for (uint32_t j = 0; j < num_funcs; ++j) { uint32_t function_index; in_u32_leb128(ctx, &function_index, "function index"); + RAISE_ERROR_UNLESS(function_index < num_total_funcs(ctx), + "invalid function index: %u", function_index); uint32_t num_locals; in_u32_leb128(ctx, &num_locals, "local count"); CALLBACK(OnLocalNameLocalCount, function_index, num_locals); diff --git a/src/common.h b/src/common.h index 40be6e34..152800bd 100644 --- a/src/common.h +++ b/src/common.h @@ -73,6 +73,19 @@ type(const type&) = delete; \ type& operator=(const type&) = delete; +#if WITH_EXCEPTIONS +#define WABT_TRY try { +#define WABT_CATCH_BAD_ALLOC_AND_EXIT \ + } \ + catch (std::bad_alloc&) { \ + WABT_FATAL("Memory allocation failure.\n"); \ + } +#else +#define WABT_TRY +#define WABT_CATCH_BAD_ALLOC_AND_EXIT +#endif + + namespace wabt { enum class Result { diff --git a/src/config.h.in b/src/config.h.in index d3101eb4..b2dc04b4 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -41,6 +41,8 @@ #cmakedefine01 COMPILER_IS_GNU #cmakedefine01 COMPILER_IS_MSVC +#cmakedefine01 WITH_EXCEPTIONS + #define SIZEOF_SIZE_T @SIZEOF_SIZE_T@ #define SIZEOF_INT @SIZEOF_INT@ #define SIZEOF_LONG @SIZEOF_LONG@ diff --git a/src/literal.cc b/src/literal.cc index 75efa1fe..8e025ace 100644 --- a/src/literal.cc +++ b/src/literal.cc @@ -376,7 +376,7 @@ static void parse_float_infinity(const char* s, } else if (*s == '+') { s++; } - assert(string_starts_with(s, end, "infinity")); + assert(string_starts_with(s, end, "inf")); // Could be inf or infinity. *out_bits = make_float(is_neg, F32_MAX_EXP, 0); } @@ -716,7 +716,7 @@ static void parse_double_infinity(const char* s, } else if (*s == '+') { s++; } - assert(string_starts_with(s, end, "infinity")); + assert(string_starts_with(s, end, "inf")); // Could be inf or infinity. *out_bits = make_double(is_neg, F64_MAX_EXP, 0); } diff --git a/src/resolve-names.cc b/src/resolve-names.cc index f68c4ee4..fb823c5c 100644 --- a/src/resolve-names.cc +++ b/src/resolve-names.cc @@ -150,6 +150,9 @@ static void resolve_memory_var(Context* ctx, Var* var) { static void resolve_local_var(Context* ctx, Var* var) { if (var->type == VarType::Name) { + if (!ctx->current_func) + return; + int index = get_local_index_by_var(ctx->current_func, var); if (index == -1) { print_error(ctx, &var->loc, diff --git a/src/tools/wasm-interp.cc b/src/tools/wasm-interp.cc index 44bb1e25..a4da13f8 100644 --- a/src/tools/wasm-interp.cc +++ b/src/tools/wasm-interp.cc @@ -1618,7 +1618,7 @@ static Result read_and_run_spec_json(const char* spec_json_filename) { return result; } -int main(int argc, char** argv) { +int ProgramMain(int argc, char** argv) { init_stdio(); parse_options(argc, argv); @@ -1632,3 +1632,9 @@ int main(int argc, char** argv) { } return result != Result::Ok; } + +int main(int argc, char** argv) { + WABT_TRY + return ProgramMain(argc, argv); + WABT_CATCH_BAD_ALLOC_AND_EXIT +} diff --git a/src/tools/wasm-link.cc b/src/tools/wasm-link.cc index 7ecfb71d..d21e586f 100644 --- a/src/tools/wasm-link.cc +++ b/src/tools/wasm-link.cc @@ -829,7 +829,7 @@ static Result perform_link(Context* ctx) { return Result::Ok; } -int main(int argc, char** argv) { +int ProgramMain(int argc, char** argv) { init_stdio(); Context context; @@ -860,3 +860,9 @@ int main(int argc, char** argv) { result = perform_link(&context); return result != Result::Ok; } + +int main(int argc, char** argv) { + WABT_TRY + return ProgramMain(argc, argv); + WABT_CATCH_BAD_ALLOC_AND_EXIT +} diff --git a/src/tools/wasm2wast.cc b/src/tools/wasm2wast.cc index 7f3ef1d1..94dd3fa8 100644 --- a/src/tools/wasm2wast.cc +++ b/src/tools/wasm2wast.cc @@ -131,7 +131,7 @@ static void parse_options(int argc, char** argv) { } } -int main(int argc, char** argv) { +int ProgramMain(int argc, char** argv) { Result result; init_stdio(); @@ -166,3 +166,9 @@ int main(int argc, char** argv) { } return result != Result::Ok; } + +int main(int argc, char** argv) { + WABT_TRY + return ProgramMain(argc, argv); + WABT_CATCH_BAD_ALLOC_AND_EXIT +} diff --git a/src/tools/wasmdump.cc b/src/tools/wasmdump.cc index fc1b3cd6..37651277 100644 --- a/src/tools/wasmdump.cc +++ b/src/tools/wasmdump.cc @@ -194,7 +194,7 @@ done: return result; } -int main(int argc, char** argv) { +int ProgramMain(int argc, char** argv) { init_stdio(); parse_options(argc, argv); @@ -216,3 +216,9 @@ int main(int argc, char** argv) { return 0; } + +int main(int argc, char** argv) { + WABT_TRY + return ProgramMain(argc, argv); + WABT_CATCH_BAD_ALLOC_AND_EXIT +} diff --git a/src/tools/wasmopcodecnt.cc b/src/tools/wasmopcodecnt.cc index b99051bb..49c1c822 100644 --- a/src/tools/wasmopcodecnt.cc +++ b/src/tools/wasmopcodecnt.cc @@ -284,7 +284,7 @@ static void display_sorted_int_pair_counter_vector( display_second_fcn, opcode_name); } -int main(int argc, char** argv) { +int ProgramMain(int argc, char** argv) { init_stdio(); parse_options(argc, argv); @@ -333,3 +333,9 @@ int main(int argc, char** argv) { delete[] data; return result != Result::Ok; } + +int main(int argc, char** argv) { + WABT_TRY + return ProgramMain(argc, argv); + WABT_CATCH_BAD_ALLOC_AND_EXIT +} diff --git a/src/tools/wast-desugar.cc b/src/tools/wast-desugar.cc index 0642d682..b1418e6c 100644 --- a/src/tools/wast-desugar.cc +++ b/src/tools/wast-desugar.cc @@ -124,7 +124,7 @@ struct Context { Result result; }; -int main(int argc, char** argv) { +int ProgramMain(int argc, char** argv) { init_stdio(); parse_options(argc, argv); @@ -157,3 +157,9 @@ int main(int argc, char** argv) { delete script; return result != Result::Ok; } + +int main(int argc, char** argv) { + WABT_TRY + return ProgramMain(argc, argv); + WABT_CATCH_BAD_ALLOC_AND_EXIT +} diff --git a/src/tools/wast2wasm.cc b/src/tools/wast2wasm.cc index 9ab56afe..9296dd5e 100644 --- a/src/tools/wast2wasm.cc +++ b/src/tools/wast2wasm.cc @@ -193,7 +193,7 @@ static void write_buffer_to_file(const char* filename, } } -int main(int argc, char** argv) { +int ProgramMain(int argc, char** argv) { init_stdio(); parse_options(argc, argv); @@ -239,3 +239,9 @@ int main(int argc, char** argv) { delete script; return result != Result::Ok; } + +int main(int argc, char** argv) { + WABT_TRY + return ProgramMain(argc, argv); + WABT_CATCH_BAD_ALLOC_AND_EXIT +} |