[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]