diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-06-10 15:45:34 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-06-10 15:45:34 +0000 |
commit | a0e2603b4d7fcc20f054625e97cb0d61321bd843 (patch) | |
tree | 6f99c75a9e41b64043a34999ad060e60b03977e5 /time.c | |
parent | 6cedcf890aa88879bb5a7f84a4d83cc8ac2a7268 (diff) |
* time.c (rb_localtime_r2): fix localtime overflow check.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_2@28261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'time.c')
-rw-r--r-- | time.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -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; } |