Avoid potential for rb_raise() while crashing
rb_obj_raw_info is called while printing out crash messages and sometimes called during garbage collection. Calling rb_raise() in these situations is undesirable because it can start executing ensure blocks.
This commit is contained in:
parent
e0a749c045
commit
d4585e7470
Notes:
git
2020-09-04 06:42:30 +09:00
11
gc.c
11
gc.c
@ -11702,6 +11702,15 @@ rb_raw_iseq_info(char *buff, const int buff_size, const rb_iseq_t *iseq)
|
||||
|
||||
bool rb_ractor_p(VALUE rv);
|
||||
|
||||
static int
|
||||
str_len_no_raise(VALUE str)
|
||||
{
|
||||
long len = RSTRING_LEN(str);
|
||||
if (len < 0) return 0;
|
||||
if (len > INT_MAX) return INT_MAX;
|
||||
return (int)len;
|
||||
}
|
||||
|
||||
const char *
|
||||
rb_raw_obj_info(char *buff, const int buff_size, VALUE obj)
|
||||
{
|
||||
@ -11789,7 +11798,7 @@ rb_raw_obj_info(char *buff, const int buff_size, VALUE obj)
|
||||
}
|
||||
break;
|
||||
case T_STRING: {
|
||||
APPENDF((BUFF_ARGS, "%.*s", RSTRING_LENINT(obj), RSTRING_PTR(obj)));
|
||||
APPENDF((BUFF_ARGS, "%.*s", str_len_no_raise(obj), RSTRING_PTR(obj)));
|
||||
break;
|
||||
}
|
||||
case T_MOVED: {
|
||||
|
Loading…
x
Reference in New Issue
Block a user