1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* 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.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21179 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2008-12-29 13:40:33 +00:00
parent 6bbd76a732
commit ad00464489
4 changed files with 24 additions and 1 deletions

View file

@ -1,3 +1,10 @@
Mon Dec 29 22:37:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* 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@ruby-lang.org> Mon Dec 29 22:27:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* random.c (rb_f_rand): type check simplified. strings are no * random.c (rb_f_rand): type check simplified. strings are no

View file

@ -434,6 +434,7 @@ VALUE rb_check_convert_type(VALUE,int,const char*,const char*);
VALUE rb_check_to_integer(VALUE, const char *); VALUE rb_check_to_integer(VALUE, const char *);
VALUE rb_to_int(VALUE); VALUE rb_to_int(VALUE);
VALUE rb_Integer(VALUE); VALUE rb_Integer(VALUE);
VALUE rb_to_float(VALUE);
VALUE rb_Float(VALUE); VALUE rb_Float(VALUE);
VALUE rb_String(VALUE); VALUE rb_String(VALUE);
VALUE rb_Array(VALUE); VALUE rb_Array(VALUE);

View file

@ -2267,6 +2267,21 @@ rb_f_float(VALUE obj, VALUE arg)
return rb_Float(arg); 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 double
rb_num2dbl(VALUE val) rb_num2dbl(VALUE val)
{ {

2
pack.c
View file

@ -789,7 +789,7 @@ pack_pack(VALUE ary, VALUE fmt)
float f; float f;
from = NEXTFROM; from = NEXTFROM;
f = RFLOAT_VALUE(rb_Float(from)); f = RFLOAT_VALUE(rb_to_float(from));
rb_str_buf_cat(res, (char*)&f, sizeof(float)); rb_str_buf_cat(res, (char*)&f, sizeof(float));
} }
break; break;