tony2001 Thu Jun 22 21:03:48 2006 UTC
Modified files:
/php-src/ext/date php_date.c
Log:
timelib_day_of_week_ex() returns -1 if the year is less than 1753
don't use its return value directly, as accessing array element with negative
index may lead to unpredictable result (crash?)
http://cvs.php.net/viewvc.cgi/php-src/ext/date/php_date.c?r1=1.100&r2=1.101&diff_format=u
Index: php-src/ext/date/php_date.c
diff -u php-src/ext/date/php_date.c:1.100 php-src/ext/date/php_date.c:1.101
--- php-src/ext/date/php_date.c:1.100 Thu Jun 22 18:44:18 2006
+++ php-src/ext/date/php_date.c Thu Jun 22 21:03:48 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_date.c,v 1.100 2006/06/22 18:44:18 tony2001 Exp $ */
+/* $Id: php_date.c,v 1.101 2006/06/22 21:03:48 tony2001 Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -679,6 +679,26 @@
}
/* }}} */
+/* {{{ day of week helpers */
+char *php_date_full_day_name(timelib_sll y, timelib_sll m, timelib_sll d)
+{
+ timelib_sll day_of_week = timelib_day_of_week(y, m, d);
+ if (day_of_week < 0) {
+ return "Unknown";
+ }
+ return day_full_names[day_of_week];
+}
+
+char *php_date_short_day_name(timelib_sll y, timelib_sll m, timelib_sll d)
+{
+ timelib_sll day_of_week = timelib_day_of_week(y, m, d);
+ if (day_of_week < 0) {
+ return "Unknown";
+ }
+ return day_short_names[day_of_week];
+}
+/* }}} */
+
/* {{{ date_format - (gm)date helper */
typedef struct {
@@ -765,8 +785,8 @@
return c;
}
-#define dayname_short(s,l) l ? loc_dat->day_shortname[s] : day_short_names[s]
-#define dayname_full(s,l) l ? loc_dat->day_fullname[s] : day_full_names[s]
+#define dayname_short(s,l) s < 0 ? "Unknown" : (l ? loc_dat->day_shortname[s]
: day_short_names[s])
+#define dayname_full(s,l) s < 0 ? "Unknown" : (l ? loc_dat->day_fullname[s] :
day_full_names[s])
#define monthname_short(s,l) l ? loc_dat->month_shortname[s] :
mon_short_names[s]
#define monthname_full(s,l) l ? loc_dat->month_fullname[s] : mon_full_names[s]
#define am_pm_lower_full(s,l) l ? loc_dat->am_pm_name[s] : am_pm_lower_names[s]
@@ -887,7 +907,7 @@
);
break;
case 'r': length = date_spprintf(&buffer, 96 TSRMLS_CC,
"%3s, %02d %3s %04d %02d:%02d:%02d %c%02d%02d",
-
day_short_names[timelib_day_of_week(t->y, t->m, t->d)],
+
php_date_short_day_name(t->y, t->m, t->d),
(int) t->d, mon_short_names[t->m - 1],
(int) t->y, (int) t->h, (int) t->i, (int) t->s,
localtime ? ((offset->offset < 0) ? '-' : '+') : '+',
@@ -1534,7 +1554,7 @@
add_assoc_long(return_value, "mon", ts->m);
add_assoc_long(return_value, "year", ts->y);
add_assoc_long(return_value, "yday", timelib_day_of_year(ts->y, ts->m,
ts->d));
- add_assoc_string(return_value, "weekday",
day_full_names[timelib_day_of_week(ts->y, ts->m, ts->d)], 1);
+ add_assoc_string(return_value, "weekday", php_date_full_day_name(ts->y,
ts->m, ts->d), 1);
add_assoc_string(return_value, "month", mon_full_names[ts->m - 1], 1);
add_index_long(return_value, 0, timestamp);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php