summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-07-06 23:11:51 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-07-06 23:11:51 +0900
commit01a8d8498fc3c1b107b303661d06b858858fce26 (patch)
tree55c481947b59a8df62f737cba404059170c11ba9 /src
parent81fc5ff48a79c75a7761e1028092b52ad2753cea (diff)
downloadmruby-01a8d8498fc3c1b107b303661d06b858858fce26.tar.gz
mruby-01a8d8498fc3c1b107b303661d06b858858fce26.zip
Avoid infinite loop when converting objects to strings.
Diffstat (limited to 'src')
-rw-r--r--src/object.c1
-rw-r--r--src/string.c1
2 files changed, 2 insertions, 0 deletions
diff --git a/src/object.c b/src/object.c
index db9dfb568..7257f402d 100644
--- a/src/object.c
+++ b/src/object.c
@@ -338,6 +338,7 @@ mrb_convert_type(mrb_state *mrb, mrb_value val, enum mrb_vtype type, const char
if (mrb_type(val) == type) return val;
v = convert_type(mrb, val, tname, method, TRUE);
if (mrb_type(v) != type) {
+ if (type == MRB_TT_STRING) return mrb_any_to_s(mrb, val);
mrb_raisef(mrb, E_TYPE_ERROR, "%v cannot be converted to %s by #%s", val, tname, method);
}
return v;
diff --git a/src/string.c b/src/string.c
index f1ffbe43d..78c41c5f3 100644
--- a/src/string.c
+++ b/src/string.c
@@ -1121,6 +1121,7 @@ mrb_str_to_str(mrb_state *mrb, mrb_value str)
return mrb_sym_str(mrb, mrb_symbol(str));
case MRB_TT_FIXNUM:
return mrb_fixnum_to_str(mrb, str, 10);
+ case MRB_TT_SCLASS:
case MRB_TT_CLASS:
case MRB_TT_MODULE:
return mrb_mod_to_s(mrb, str);