From caa3c880400e48ff22099f3c003e6ba5290f9b61 Mon Sep 17 00:00:00 2001 From: akr Date: Wed, 30 Oct 2013 03:22:23 +0000 Subject: * time.c (v2w): Normalize a rational value to an integer if possible. [ruby-core:58070] [Bug #9059] reported by Isaac Schwabacher. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43473 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ time.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/ChangeLog b/ChangeLog index 86f9dde8cb..83e869901f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Oct 30 12:20:32 2013 Tanaka Akira + + * time.c (v2w): Normalize a rational value to an integer if possible. + [ruby-core:58070] [Bug #9059] reported by Isaac Schwabacher. + Wed Oct 30 12:08:41 2013 Masaki Matsushita * array.c (rb_ary_uniq_bang): use rb_ary_modify_check() instead of diff --git a/time.c b/time.c index c8f15bfc97..c01ca743d5 100644 --- a/time.c +++ b/time.c @@ -320,6 +320,11 @@ v2w_bignum(VALUE v) static inline wideval_t v2w(VALUE v) { + if (RB_TYPE_P(v, T_RATIONAL)) { + if (RRATIONAL(v)->den != LONG2FIX(1)) + return v; + v = RRATIONAL(v)->num; + } #if WIDEVALUE_IS_WIDER if (FIXNUM_P(v)) { return WIDEVAL_WRAP((WIDEVALUE)(SIGNED_WIDEVALUE)(long)v); -- cgit v1.2.3