[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]