From cb962c5ae59f9237038d6400d9c1e709bed80efd Mon Sep 17 00:00:00 2001 From: akr Date: Thu, 10 Jun 2010 15:45:34 +0000 Subject: [PATCH] * time.c (rb_localtime_r2): fix localtime overflow check. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ time.c | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index ed651ab396..fe298b4bed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Fri Jun 11 00:42:45 2010 Tanaka Akira + + * time.c (rb_localtime_r2): fix localtime overflow check. + Thu Jun 10 23:05:44 2010 Tanaka Akira * time.c (rb_localtime_r2): refine localtime overflow check for diff --git a/time.c b/time.c index 5acc64345c..6c5a4f20d0 100644 --- a/time.c +++ b/time.c @@ -872,12 +872,13 @@ rb_localtime_r2(const time_t *t, struct tm *result) if (result) { int gmtoff1 = 0; int gmtoff2 = 0; + struct tm tmp = *result; # if defined(HAVE_STRUCT_TM_TM_GMTOFF) gmtoff1 = result->tm_gmtoff; # endif - time_t t2 = mktime(result); + time_t t2 = mktime(&tmp); # if defined(HAVE_STRUCT_TM_TM_GMTOFF) - gmtoff2 = result->tm_gmtoff; + gmtoff2 = tmp.tm_gmtoff; # endif if (*t + gmtoff1 != t2 + gmtoff2) result = NULL; @@ -894,7 +895,8 @@ rb_localtime_r2(const time_t *t, struct tm *result) result = rb_gmtime_r(t, result); #if defined(HAVE_TIMEGM) && defined(LOCALTIME_OVERFLOW_PROBLEM) if (result) { - time_t t2 = timegm(result); + struct tm tmp = *result; + time_t t2 = timegm(&tmp); if (*t != t2) result = NULL; }