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/