1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Copy va_list of exception classes

The list is reused when an exception raised again after retrying
in the rescue procedure.
This commit is contained in:
Nobuyoshi Nakada 2021-02-09 00:42:12 +09:00
parent a6f5f3cccd
commit 97cf290063
Notes: git 2021-02-09 12:59:38 +09:00

6
eval.c
View file

@ -1033,14 +1033,18 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1,
if (state == TAG_RAISE) {
int handle = FALSE;
VALUE eclass;
va_list ap;
result = Qnil;
while ((eclass = va_arg(args, VALUE)) != 0) {
/* reuses args when raised again after retrying in r_proc */
va_copy(ap, args);
while ((eclass = va_arg(ap, VALUE)) != 0) {
if (rb_obj_is_kind_of(ec->errinfo, eclass)) {
handle = TRUE;
break;
}
}
va_end(ap);
if (handle) {
state = TAG_NONE;