diff --git a/src/string.c b/src/string.c index 552293a46a..eda4c3fb83 100644 --- a/src/string.c +++ b/src/string.c @@ -2124,6 +2124,10 @@ mrb_str_len_to_inum(mrb_state *mrb, const char *str, size_t len, int base, int b } break; } /* end of switch (base) { */ + if (p>=pend) { + if (badcheck) goto bad; + return mrb_fixnum_value(0); + } if (*p == '0') { /* squeeze preceding 0s */ p++; while (p= base) { @@ -2186,7 +2193,7 @@ mrb_str_len_to_inum(mrb_state *mrb, const char *str, size_t len, int base, int b /* not reached */ bad: mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid string for number(%S)", - mrb_inspect(mrb, mrb_str_new_cstr(mrb, str))); + mrb_inspect(mrb, mrb_str_new(mrb, str, pend-str))); /* not reached */ return mrb_fixnum_value(0); }