diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-03-16 01:53:52 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-03-16 01:53:52 +0000 |
commit | 96d5b6f824e09c3a981d8bc41ca7ea618ed58776 (patch) | |
tree | b3afe8df4f6c6653a47b3d793f714368f7aeaf80 | |
parent | 38827f5820c7ef10e86691ffe3f0ee9e00f32d59 (diff) | |
download | ruby-96d5b6f824e09c3a981d8bc41ca7ea618ed58776.tar.gz |
rational.c: zero division
* rational.c (read_rat_nos): denominator cannot be 0, raise zero
division in that case.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57985 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | rational.c | 1 | ||||
-rw-r--r-- | test/ruby/test_rational.rb | 5 |
2 files changed, 6 insertions, 0 deletions
diff --git a/rational.c b/rational.c index 4bdc695dc1..742f594f65 100644 --- a/rational.c +++ b/rational.c @@ -2396,6 +2396,7 @@ read_rat_nos(const char **s, int sign, int strict, VALUE *num) if (**s == '/') { (*s)++; if (!read_digits(s, strict, &den, NULL)) goto failed; + if (den == ZERO) rb_num_zerodiv(); nurat_reduce(num, &den); if (div != ONE && den != ONE) den = rb_int_mul(den, div); diff --git a/test/ruby/test_rational.rb b/test/ruby/test_rational.rb index 6185611a5c..ed4c5b1006 100644 --- a/test/ruby/test_rational.rb +++ b/test/ruby/test_rational.rb @@ -776,6 +776,11 @@ class Rational_Test < Test::Unit::TestCase ng[5, 3, '5/3x'] end + def test_parse_zero_denominator + assert_raise(ZeroDivisionError) {"1/0".to_r} + assert_raise(ZeroDivisionError) {Rational("1/0")} + end + def test_to_i assert_equal(1, Rational(3,2).to_i) assert_equal(1, Integer(Rational(3,2))) |