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);
|
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 *
|
const char *
|
||||||
rb_raw_obj_info(char *buff, const int buff_size, VALUE obj)
|
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;
|
break;
|
||||||
case T_STRING: {
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case T_MOVED: {
|
case T_MOVED: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user