ruby-changes:20088
From: naruse <ko1@a...>
Date: Fri, 17 Jun 2011 04:46:19 +0900 (JST)
Subject: [ruby-changes:20088] naruse:r32135 (trunk): * time.c (rb_time_new): prevent overflow by "* 1000".
naruse 2011-06-17 04:46:08 +0900 (Fri, 17 Jun 2011) New Revision: 32135 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32135 Log: * time.c (rb_time_new): prevent overflow by "* 1000". Modified files: trunk/ChangeLog trunk/time.c Index: time.c =================================================================== --- time.c (revision 32134) +++ time.c (revision 32135) @@ -2299,7 +2299,27 @@ VALUE rb_time_new(time_t sec, long usec) { - return time_new_timew(rb_cTime, nsec2timew(sec, usec * 1000)); + wideval_t timew; + + if (usec >= 1000000) { + long sec2 = usec / 1000000; + if (sec > TIMET_MAX - sec2) { + rb_raise(rb_eRangeError, "out of Time range"); + } + usec -= sec2 * 1000000; + sec += sec2; + } + else if (usec <= 1000000) { + long sec2 = usec / 1000000; + if (sec < -TIMET_MAX - sec2) { + rb_raise(rb_eRangeError, "out of Time range"); + } + usec -= sec2 * 1000000; + sec += sec2; + } + + timew = nsec2timew(sec, usec * 1000); + return time_new_timew(rb_cTime, timew); } VALUE Index: ChangeLog =================================================================== --- ChangeLog (revision 32134) +++ ChangeLog (revision 32135) @@ -1,3 +1,7 @@ +Thu Jun 16 14:32:31 2011 NARUSE, Yui <naruse@r...> + + * time.c (rb_time_new): prevent overflow by "* 1000". + Fri Jun 17 03:07:36 2011 Koichi Sasada <ko1@a...> * benchmark/bm_vm4_thread_create_join.rb, -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/