summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-05-08 21:32:11 +0900
committerGitHub <[email protected]>2019-05-08 21:32:11 +0900
commitecc6eb81b53efd5f484515d87b0510eaa68aa68c (patch)
tree38594c750ab0d15d3beef351c3881a8436cf0f99
parentf405d35dac0311f3b6ec946eb32f671b230dfac4 (diff)
parent1975dedb214b9d181630c337374702a1b4725288 (diff)
downloadmruby-ecc6eb81b53efd5f484515d87b0510eaa68aa68c.tar.gz
mruby-ecc6eb81b53efd5f484515d87b0510eaa68aa68c.zip
Merge pull request #4426 from shuujii/use-mrb_string_value_cstr-in-mrb_str_to_dbl
Use `mrb_string_value_cstr` in `mrb_str_to_dbl`
-rw-r--r--mrbgems/mruby-kernel-ext/test/kernel.rb2
-rw-r--r--src/string.c17
2 files changed, 3 insertions, 16 deletions
diff --git a/mrbgems/mruby-kernel-ext/test/kernel.rb b/mrbgems/mruby-kernel-ext/test/kernel.rb
index 28f089007..ad9177165 100644
--- a/mrbgems/mruby-kernel-ext/test/kernel.rb
+++ b/mrbgems/mruby-kernel-ext/test/kernel.rb
@@ -65,6 +65,8 @@ assert('Kernel#Float') do
assert_equal(123.456, Float(123.456))
assert_equal(123.456, Float("123.456"))
assert_raise(TypeError) { Float(nil) }
+ assert_raise(ArgumentError) { Float("1.5a") }
+ assert_raise(ArgumentError) { Float("1.5\0") }
end
assert('Kernel#String') do
diff --git a/src/string.c b/src/string.c
index 7fc405a2b..578e3bdcc 100644
--- a/src/string.c
+++ b/src/string.c
@@ -2281,22 +2281,7 @@ bad:
MRB_API double
mrb_str_to_dbl(mrb_state *mrb, mrb_value str, mrb_bool badcheck)
{
- char *s;
- mrb_int len;
-
- mrb_to_str(mrb, str);
- s = RSTRING_PTR(str);
- len = RSTRING_LEN(str);
- if (s) {
- if (badcheck && memchr(s, '\0', len)) {
- mrb_raise(mrb, E_ARGUMENT_ERROR, "string for Float contains null byte");
- }
- if (s[len]) { /* no sentinel somehow */
- struct RString *temp_str = str_new(mrb, s, len);
- s = RSTR_PTR(temp_str);
- }
- }
- return mrb_cstr_to_dbl(mrb, s, badcheck);
+ return mrb_cstr_to_dbl(mrb, mrb_string_value_cstr(mrb, &str), badcheck);
}
/* 15.2.10.5.39 */