summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Engert <kaie@kuix.de>2017-03-08 12:30:28 +0100
committerKai Engert <kaie@kuix.de>2017-03-08 12:30:28 +0100
commit580cf1d9401138fa3cc66893271b969db8755266 (patch)
tree0c053aec148600b9ef40447de62577d4ab6202c8
parentbeaf9641c82e69becb273d1e7d200c580d3bcebf (diff)
downloadnspr-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
-rw-r--r--pr/src/misc/prtime.c15
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);