From 976a22df1608fa843edddaef0c78a996b664d4a0 Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Thu, 7 Jun 2007 08:58:38 +0000 Subject: [PATCH] php_gmtime_r() fixes --- ext/ftp/ftp.c | 3 +++ ext/interbase/ibase_query.c | 6 +++++- ext/session/session.c | 9 +++++++-- ext/standard/datetime.c | 6 ++++++ ext/standard/ftp_fopen_wrapper.c | 3 +++ 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c index 80165e8508..820de4cb30 100644 --- a/ext/ftp/ftp.c +++ b/ext/ftp/ftp.c @@ -1012,6 +1012,9 @@ ftp_mdtm(ftpbuf_t *ftp, const char *path) /* figure out the GMT offset */ stamp = time(NULL); gmt = php_gmtime_r(&stamp, &tmbuf); + if (!gmt) { + return -1; + } gmt->tm_isdst = -1; /* apply the GMT offset */ diff --git a/ext/interbase/ibase_query.c b/ext/interbase/ibase_query.c index 73277e1578..2f9ebc8c5a 100644 --- a/ext/interbase/ibase_query.c +++ b/ext/interbase/ibase_query.c @@ -675,7 +675,11 @@ static int _php_ibase_bind(XSQLDA *sqlda, zval ***b_vars, BIND_BUF *buf, /* {{{ case SQL_TYPE_DATE: case SQL_TYPE_TIME: if (Z_TYPE_P(b_var) == IS_LONG) { - php_gmtime_r(&Z_LVAL_P(b_var), &t); + struct tm *res; + res = php_gmtime_r(&Z_LVAL_P(b_var), &t); + if (!res) { + return FAILURE; + } } else { #ifdef HAVE_STRPTIME char *format = INI_STR("ibase.timestampformat"); diff --git a/ext/session/session.c b/ext/session/session.c index 874bbc67d9..93c185d443 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -930,11 +930,16 @@ static char *week_days[] = { static inline void strcpy_gmt(char *ubuf, time_t *when) { char buf[MAX_STR]; - struct tm tm; + struct tm tm, *res; int n; - php_gmtime_r(when, &tm); + res = php_gmtime_r(when, &tm); + if (!res) { + buf[0] = '\0'; + return; + } + n = snprintf(buf, sizeof(buf), "%s, %02d %s %d %02d:%02d:%02d GMT", /* SAFE */ week_days[tm.tm_wday], tm.tm_mday, month_names[tm.tm_mon], tm.tm_year + 1900, diff --git a/ext/standard/datetime.c b/ext/standard/datetime.c index f67ada29f0..38e64388e2 100644 --- a/ext/standard/datetime.c +++ b/ext/standard/datetime.c @@ -58,6 +58,12 @@ PHPAPI char *php_std_date(time_t t TSRMLS_DC) tm1 = php_gmtime_r(&t, &tmbuf); str = emalloc(81); + str[0] = '\0'; + + if (!tm1) { + return str; + } + if (PG(y2k_compliance)) { snprintf(str, 80, "%s, %02d %s %04d %02d:%02d:%02d GMT", day_short_names[tm1->tm_wday], diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c index 0a2d818abf..813eecf1fe 100644 --- a/ext/standard/ftp_fopen_wrapper.c +++ b/ext/standard/ftp_fopen_wrapper.c @@ -808,6 +808,9 @@ static int php_stream_ftp_url_stat(php_stream_wrapper *wrapper, char *url, int f /* figure out the GMT offset */ stamp = time(NULL); gmt = php_gmtime_r(&stamp, &tmbuf); + if (!gmt) { + goto mdtm_error; + } gmt->tm_isdst = -1; /* apply the GMT offset */ -- 2.50.1