]> granicus.if.org Git - php/commitdiff
setting plausible default value for struct members
authorAnatol Belski <ab@php.net>
Sat, 16 Mar 2013 17:07:21 +0000 (18:07 +0100)
committerAnatol Belski <ab@php.net>
Sat, 16 Mar 2013 17:07:21 +0000 (18:07 +0100)
especially for unsigned members so they don't casted to max unsigned

ext/date/php_date.c
ext/date/tests/bug52113.phpt

index b454dd0f06d467482ef496782658774889c2137e..a073aa691eafbe966a283d251ff831f419a02fce 100644 (file)
@@ -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;
index 226dae5f26cc4626a43ea7c776736730820ed9a9..862e92e9615012654c05087c19a1ff9ceb11a1ec 100644 (file)
@@ -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"]=>