error.c: protect mrb_print_error() from exceptions.

Now the function can be called when `mrb->jmp` is not set.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2022-05-06 16:26:31 +09:00
parent c3e4ee0bf2
commit 38b69b6014
2 changed files with 20 additions and 11 deletions
+20
View File
@@ -630,6 +630,26 @@ mrb_raise_nomemory(mrb_state *mrb)
}
}
MRB_API void
mrb_print_error(mrb_state *mrb)
{
#ifndef MRB_NO_STDIO
if (mrb->jmp == NULL) {
struct mrb_jmpbuf c_jmp;
MRB_TRY(&c_jmp) {
mrb->jmp = &c_jmp;
mrb_print_backtrace(mrb);
} MRB_CATCH(&c_jmp) {
/* ignore exception during print_backtrace() */
} MRB_END_EXC(&c_jmp);
mrb->jmp = NULL;
}
else {
mrb_print_backtrace(mrb);
}
#endif
}
void
mrb_init_exception(mrb_state *mrb)
{
-11
View File
@@ -49,12 +49,6 @@ mrb_p(mrb_state *mrb, mrb_value obj)
}
MRB_API void
mrb_print_error(mrb_state *mrb)
{
mrb_print_backtrace(mrb);
}
MRB_API void
mrb_show_version(mrb_state *mrb)
{
@@ -78,11 +72,6 @@ mrb_p(mrb_state *mrb, mrb_value obj)
{
}
MRB_API void
mrb_print_error(mrb_state *mrb)
{
}
MRB_API void
mrb_show_version(mrb_state *mrb)
{