From fa3fc711d3fb54bf1746138ffcf7f46426921204 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Sat, 16 Mar 2013 18:07:21 +0100 Subject: [PATCH] setting plausible default value for struct members especially for unsigned members so they don't casted to max unsigned --- ext/date/php_date.c | 30 +++++++++++++++--------------- ext/date/tests/bug52113.phpt | 6 +++--- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index b454dd0f06..a073aa691e 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4006,14 +4006,14 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter { (*intobj)->diff = timelib_rel_time_ctor(); -#define PHP_DATE_INTERVAL_READ_PROPERTY(element, member, itype) \ +#define PHP_DATE_INTERVAL_READ_PROPERTY(element, member, itype, def) \ do { \ zval **z_arg = NULL; \ if (zend_hash_find(myht, element, strlen(element) + 1, (void**) &z_arg) == SUCCESS) { \ convert_to_long(*z_arg); \ (*intobj)->diff->member = (itype)Z_LVAL_PP(z_arg); \ } else { \ - (*intobj)->diff->member = (itype)-1; \ + (*intobj)->diff->member = (itype)def; \ } \ } while (0); @@ -4028,21 +4028,21 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter } \ } while (0); - PHP_DATE_INTERVAL_READ_PROPERTY("y", y, timelib_sll) - PHP_DATE_INTERVAL_READ_PROPERTY("m", m, timelib_sll) - PHP_DATE_INTERVAL_READ_PROPERTY("d", d, timelib_sll) - PHP_DATE_INTERVAL_READ_PROPERTY("h", h, timelib_sll) - PHP_DATE_INTERVAL_READ_PROPERTY("i", i, timelib_sll) - PHP_DATE_INTERVAL_READ_PROPERTY("s", s, timelib_sll) - PHP_DATE_INTERVAL_READ_PROPERTY("weekday", weekday, int) - PHP_DATE_INTERVAL_READ_PROPERTY("weekday_behavior", weekday_behavior, int) - PHP_DATE_INTERVAL_READ_PROPERTY("first_last_day_of", first_last_day_of, int) - PHP_DATE_INTERVAL_READ_PROPERTY("invert", invert, int); + PHP_DATE_INTERVAL_READ_PROPERTY("y", y, timelib_sll, -1) + PHP_DATE_INTERVAL_READ_PROPERTY("m", m, timelib_sll, -1) + PHP_DATE_INTERVAL_READ_PROPERTY("d", d, timelib_sll, -1) + PHP_DATE_INTERVAL_READ_PROPERTY("h", h, timelib_sll, -1) + PHP_DATE_INTERVAL_READ_PROPERTY("i", i, timelib_sll, -1) + PHP_DATE_INTERVAL_READ_PROPERTY("s", s, timelib_sll, -1) + PHP_DATE_INTERVAL_READ_PROPERTY("weekday", weekday, int, -1) + PHP_DATE_INTERVAL_READ_PROPERTY("weekday_behavior", weekday_behavior, int, -1) + PHP_DATE_INTERVAL_READ_PROPERTY("first_last_day_of", first_last_day_of, int, -1) + PHP_DATE_INTERVAL_READ_PROPERTY("invert", invert, int, 0); PHP_DATE_INTERVAL_READ_PROPERTY_I64("days", days); - PHP_DATE_INTERVAL_READ_PROPERTY("special_type", special.type, unsigned int); + PHP_DATE_INTERVAL_READ_PROPERTY("special_type", special.type, unsigned int, 0); PHP_DATE_INTERVAL_READ_PROPERTY_I64("special_amount", special.amount); - PHP_DATE_INTERVAL_READ_PROPERTY("have_weekday_relative", have_weekday_relative, unsigned int); - PHP_DATE_INTERVAL_READ_PROPERTY("have_special_relative", have_special_relative, unsigned int); + PHP_DATE_INTERVAL_READ_PROPERTY("have_weekday_relative", have_weekday_relative, unsigned int, 0); + PHP_DATE_INTERVAL_READ_PROPERTY("have_special_relative", have_special_relative, unsigned int, 0); (*intobj)->initialized = 1; return 0; diff --git a/ext/date/tests/bug52113.phpt b/ext/date/tests/bug52113.phpt index 226dae5f26..862e92e961 100644 --- a/ext/date/tests/bug52113.phpt +++ b/ext/date/tests/bug52113.phpt @@ -189,13 +189,13 @@ object(DateInterval)#8 (15) { ["days"]=> string(4) "2400" ["special_type"]=> - int(-1) + int(0) ["special_amount"]=> string(2) "-1" ["have_weekday_relative"]=> - int(-1) + int(0) ["have_special_relative"]=> - int(-1) + int(0) } object(DatePeriod)#9 (6) { ["start"]=> -- 2.40.0