ruby-changes:6584
From: usa <ko1@a...>
Date: Thu, 17 Jul 2008 10:33:17 +0900 (JST)
Subject: [ruby-changes:6584] Ruby:r18100 (ruby_1_8): * numeric.c (check_uint, rb_num2uint, rb_fix2uint): strict check.
usa 2008-07-17 10:32:58 +0900 (Thu, 17 Jul 2008) New Revision: 18100 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18100 Log: * numeric.c (check_uint, rb_num2uint, rb_fix2uint): strict check. fixed [ruby-dev:33683] Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/numeric.c Index: ruby_1_8/numeric.c =================================================================== --- ruby_1_8/numeric.c (revision 18099) +++ ruby_1_8/numeric.c (revision 18100) @@ -1603,8 +1603,17 @@ check_uint(num) unsigned long num; { - if (num > UINT_MAX) { - rb_raise(rb_eRangeError, "integer %lu too big to convert to `unsigned int'", num); + static const unsigned long mask = ~(unsigned long)UINT_MAX; + static const unsigned long msb = ~LONG_MAX; + const char *s; + + if ((num & mask) != 0 && + ((num & mask) != mask || (num & ~mask) <= INT_MAX + 1UL)) { + if ((num & msb) == 0) + s = "big"; + else + s = "small"; + rb_raise(rb_eRangeError, "integer %ld too %s to convert to `unsigned int'", num, s); } } @@ -1634,10 +1643,7 @@ { unsigned long num = rb_num2ulong(val); - if (RTEST(rb_funcall(val, '<', 1, INT2FIX(0)))) - check_int(num); - else - check_uint(num); + check_uint(num); return num; } @@ -1651,10 +1657,8 @@ return rb_num2uint(val); } num = FIX2ULONG(val); - if (RTEST(rb_funcall(val, '<', 1, INT2FIX(0)))) - check_int(num); - else - check_uint(num); + + check_uint(num); return num; } #else Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 18099) +++ ruby_1_8/ChangeLog (revision 18100) @@ -1,3 +1,8 @@ +Thu Jul 17 10:32:40 2008 NAKAMURA Usaku <usa@r...> + + * numeric.c (check_uint, rb_num2uint, rb_fix2uint): strict check. + fixed [ruby-dev:33683] + Tue Jul 15 23:00:17 2008 NAKAMURA Usaku <usa@r...> * {bcc32,win32}/Makefile.sub (ruby_version): follow changes in -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/