From ae55ecc26791156a7e70e76696bba6f95111841b Mon Sep 17 00:00:00 2001 From: usa Date: Sat, 1 Oct 2016 17:04:04 +0000 Subject: [PATCH] * numeric.c (rb_fix2str): detect unnormalized Fixnum value. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ numeric.c | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/ChangeLog b/ChangeLog index e0da0e0336..1cc19899de 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sun Oct 2 02:03:06 2016 NAKAMURA Usaku + + * numeric.c (rb_fix2str): detect unnormalized Fixnum value. + Sat Oct 1 23:08:47 2016 NAKAMURA Usaku * ext/date/date_parse.c (date_zone_to_diff): it's nonsence and really diff --git a/numeric.c b/numeric.c index 770c471672..70982185b3 100644 --- a/numeric.c +++ b/numeric.c @@ -3267,6 +3267,17 @@ rb_fix2str(VALUE x, int base) if (base < 2 || 36 < base) { rb_raise(rb_eArgError, "invalid radix %d", base); } +#if SIZEOF_LONG < SIZEOF_VOIDP +# if SIZEOF_VOIDP == SIZEOF_LONG_LONG + if ((val >= 0 && (x & 0xFFFFFFFF00000000ull)) || + (val < 0 && (x & 0xFFFFFFFF00000000ull) != 0xFFFFFFFF00000000ull)) { + rb_bug("Unnormalized Fixnum value %p", x); + } +# elif + /* should do something like above code, but currently ruby does not know */ + /* such platforms */ +# endif +#endif if (val == 0) { return rb_usascii_str_new2("0"); }