diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c index a135b0fa7..c2f736871 100644 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c @@ -674,15 +674,8 @@ main(int argc, char **argv) l_restart: if (!MRB_OPEN_SUCCESS(mrb)) { - if (mrb) { - /* Initialization failed - print exception details */ - mrb_print_error(mrb); - mrb_close(mrb); - } - else { - /* Allocation failed */ - fputs("Failed to allocate mrb_state, exiting mrdb\n", stderr); - } + mrb_print_error(mrb); /* handles NULL */ + mrb_close(mrb); /* handles NULL */ return EXIT_FAILURE; } diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c index 77ab8ce6b..c26dcfdd3 100644 --- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c @@ -476,15 +476,8 @@ main(int argc, char **argv) /* new interpreter instance */ mrb = mrb_open(); if (!MRB_OPEN_SUCCESS(mrb)) { - if (mrb) { - /* Initialization failed - print exception details */ - mrb_print_error(mrb); - mrb_close(mrb); - } - else { - /* Allocation failed */ - fputs("Failed to allocate mrb_state, exiting mirb\n", stderr); - } + mrb_print_error(mrb); /* handles NULL */ + mrb_close(mrb); /* handles NULL */ return EXIT_FAILURE; } diff --git a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c index 38274c399..fc56900c3 100644 --- a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +++ b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c @@ -283,15 +283,8 @@ main(int argc, char **argv) mrb_value v; if (!MRB_OPEN_SUCCESS(mrb)) { - if (mrb) { - /* Initialization failed - print exception details */ - mrb_print_error(mrb); - mrb_close(mrb); - } - else { - /* Allocation failed */ - fprintf(stderr, "%s: Failed to allocate mrb_state, exiting mruby\n", *argv); - } + mrb_print_error(mrb); /* handles NULL */ + mrb_close(mrb); /* handles NULL */ return EXIT_FAILURE; } diff --git a/mrbgems/mruby-test/driver.c b/mrbgems/mruby-test/driver.c index d1decad8b..7caecd54e 100644 --- a/mrbgems/mruby-test/driver.c +++ b/mrbgems/mruby-test/driver.c @@ -291,15 +291,8 @@ main(int argc, char **argv) /* new interpreter instance */ mrb = mrb_open(); if (!MRB_OPEN_SUCCESS(mrb)) { - if (mrb) { - /* Initialization failed - print exception details */ - mrb_print_error(mrb); - mrb_close(mrb); - } - else { - /* Allocation failed */ - fputs("Failed to allocate mrb_state, exiting test driver", stderr); - } + mrb_print_error(mrb); /* handles NULL */ + mrb_close(mrb); /* handles NULL */ return EXIT_FAILURE; } diff --git a/src/error.c b/src/error.c index ffb9e4792..487e1afc7 100644 --- a/src/error.c +++ b/src/error.c @@ -845,6 +845,11 @@ MRB_API void mrb_print_error(mrb_state *mrb) { #ifndef MRB_NO_STDIO + if (!mrb) { + /* mrb_open() returned NULL - allocation failed */ + fputs("Failed to allocate mrb_state\n", stderr); + return; + } if (mrb->jmp == NULL) { struct mrb_jmpbuf c_jmp; MRB_TRY(&c_jmp) {