diff options
author | Kai Engert <kaie@kuix.de> | 2017-03-08 12:30:28 +0100 |
---|---|---|
committer | Kai Engert <kaie@kuix.de> | 2017-03-08 12:30:28 +0100 |
commit | 580cf1d9401138fa3cc66893271b969db8755266 (patch) | |
tree | 0c053aec148600b9ef40447de62577d4ab6202c8 /pr/src | |
parent | beaf9641c82e69becb273d1e7d200c580d3bcebf (diff) | |
download | nspr-hg-580cf1d9401138fa3cc66893271b969db8755266.tar.gz |
Bug 1227497, Function PR_LocalTimeParameters from nsprpub/pr/src/misc/prtime.c can create variable localTime with garbage content, r=wtc
Diffstat (limited to 'pr/src')
-rw-r--r-- | pr/src/misc/prtime.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/pr/src/misc/prtime.c b/pr/src/misc/prtime.c index 39294114..b5423228 100644 --- a/pr/src/misc/prtime.c +++ b/pr/src/misc/prtime.c @@ -594,6 +594,7 @@ PR_LocalTimeParameters(const PRExplodedTime *gmt) PRTimeParameters retVal; struct tm localTime; + struct tm *localTimeResult; time_t secs; PRTime secs64; PRInt64 usecPerSec; @@ -620,7 +621,12 @@ PR_LocalTimeParameters(const PRExplodedTime *gmt) */ secs = 86400L; - (void) MT_safe_localtime(&secs, &localTime); + localTimeResult = MT_safe_localtime(&secs, &localTime); + PR_ASSERT(localTimeResult != NULL); + if (localTimeResult == NULL) { + /* Shouldn't happen. Use safe fallback for optimized builds. */ + return PR_GMTParameters(gmt); + } /* GMT is 00:00:00, 2nd of Jan. */ @@ -971,6 +977,7 @@ PR_ParseTimeStringToExplodedTime( int hour = -1; int min = -1; int sec = -1; + struct tm *localTimeResult; const char *rest = string; @@ -1632,7 +1639,11 @@ PR_ParseTimeStringToExplodedTime( zone_offset for the date we are parsing is the same as the zone offset on 00:00:00 2 Jan 1970 GMT. */ secs = 86400; - (void) MT_safe_localtime(&secs, &localTime); + localTimeResult = MT_safe_localtime(&secs, &localTime); + PR_ASSERT(localTimeResult != NULL); + if (localTimeResult == NULL) { + return PR_FAILURE; + } zone_offset = localTime.tm_min + 60 * localTime.tm_hour + 1440 * (localTime.tm_mday - 2); |