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

ruby-changes:9639

From: matz <ko1@a...>
Date: Mon, 29 Dec 2008 22:40:55 +0900 (JST)
Subject: [ruby-changes:9639] Ruby:r21179 (trunk): * pack.c (pack_pack): template f should not accept non float

matz	2008-12-29 22:40:33 +0900 (Mon, 29 Dec 2008)

  New Revision: 21179

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21179

  Log:
    * pack.c (pack_pack): template f should not accept non float
      values.  [ruby-dev:37656]
    * object.c (rb_to_float): new function to type check floats.

  Modified files:
    trunk/ChangeLog
    trunk/include/ruby/intern.h
    trunk/object.c
    trunk/pack.c

Index: include/ruby/intern.h
===================================================================
--- include/ruby/intern.h	(revision 21178)
+++ include/ruby/intern.h	(revision 21179)
@@ -434,6 +434,7 @@
 VALUE rb_check_to_integer(VALUE, const char *);
 VALUE rb_to_int(VALUE);
 VALUE rb_Integer(VALUE);
+VALUE rb_to_float(VALUE);
 VALUE rb_Float(VALUE);
 VALUE rb_String(VALUE);
 VALUE rb_Array(VALUE);
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21178)
+++ ChangeLog	(revision 21179)
@@ -1,3 +1,10 @@
+Mon Dec 29 22:37:57 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* pack.c (pack_pack): template f should not accept non float
+	  values.  [ruby-dev:37656]
+
+	* object.c (rb_to_float): new function to type check floats.
+
 Mon Dec 29 22:27:11 2008  Yukihiro Matsumoto  <matz@r...>
 
 	* random.c (rb_f_rand): type check simplified.  strings are no
Index: object.c
===================================================================
--- object.c	(revision 21178)
+++ object.c	(revision 21179)
@@ -2267,6 +2267,21 @@
     return rb_Float(arg);
 }
 
+VALUE
+rb_to_float(VALUE val)
+{
+    VALUE v;
+
+    if (TYPE(val) == T_FLOAT) return val;
+    v = convert_type(val, "Float", "to_f", Qtrue);
+    if (TYPE(v) != T_FLOAT) {
+	const char *cname = rb_obj_classname(val);
+	rb_raise(rb_eTypeError, "can't convert %s to Float (%s#to_f gives %s)",
+		 cname, cname, rb_obj_classname(v));
+    }
+    return v;
+}
+
 double
 rb_num2dbl(VALUE val)
 {
Index: pack.c
===================================================================
--- pack.c	(revision 21178)
+++ pack.c	(revision 21179)
@@ -789,7 +789,7 @@
 		float f;
 
 		from = NEXTFROM;
-		f = RFLOAT_VALUE(rb_Float(from));
+		f = RFLOAT_VALUE(rb_to_float(from));
 		rb_str_buf_cat(res, (char*)&f, sizeof(float));
 	    }
 	    break;

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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