ruby-changes:4738
From: ko1@a...
Date: Mon, 28 Apr 2008 20:29:21 +0900 (JST)
Subject: [ruby-changes:4738] tadf - Ruby:r16232 (trunk): * rational (nurat_marshal_load): checks the given
tadf 2008-04-28 20:28:55 +0900 (Mon, 28 Apr 2008) New Revision: 16232 Modified files: trunk/ChangeLog trunk/rational.c Log: * rational (nurat_marshal_load): checks the given denominator. [ruby-dev:34536] http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16232&r2=16231&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/rational.c?r1=16232&r2=16231&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 16231) +++ ChangeLog (revision 16232) @@ -1,3 +1,8 @@ +Mon Apr 28 20:24:27 2008 Tadayoshi Funaba <tadf@d...> + + * rational (nurat_marshal_load): checks the given + denominator. [ruby-dev:34536] + Mon Apr 28 14:21:18 2008 Tanaka Akira <akr@f...> * include/ruby/ruby.h (POSFIXABLE): use FIXNUM_MAX+1 instead of Index: rational.c =================================================================== --- rational.c (revision 16231) +++ rational.c (revision 16232) @@ -407,9 +407,14 @@ if (!k_integer_p(den)) den = f_to_i(den); - if (f_negative_p(den)) { + switch (FIX2INT(f_cmp(den, ZERO))) { + case -1: num = f_negate(num); den = f_negate(den); + break; + case 0: + rb_raise(rb_eZeroDivError, "devided by zero"); + break; } break; } @@ -452,10 +457,8 @@ switch (FIX2INT(f_cmp(den, ZERO))) { case -1: - if (f_negative_p(den)) { - num = f_negate(num); - den = f_negate(den); - } + num = f_negate(num); + den = f_negate(den); break; case 0: rb_raise(rb_eZeroDivError, "devided by zero"); @@ -477,10 +480,8 @@ { switch (FIX2INT(f_cmp(den, ZERO))) { case -1: - if (f_negative_p(den)) { - num = f_negate(num); - den = f_negate(den); - } + num = f_negate(num); + den = f_negate(den); break; case 0: rb_raise(rb_eZeroDivError, "devided by zero"); @@ -1190,6 +1191,10 @@ get_dat1(self); dat->num = RARRAY_PTR(a)[0]; dat->den = RARRAY_PTR(a)[1]; + + if (f_zero_p(dat->den)) + rb_raise(rb_eZeroDivError, "devided by zero"); + return self; } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/