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/