From 7419b572725b2e010e10a0041f8a97b957fbdcd5 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+ndossche@users.noreply.github.com> Date: Tue, 23 Dec 2025 00:35:14 +0100 Subject: [PATCH 1/2] date: Remove unused argument for internal functions --- ext/date/php_date.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 692136bbad2ac..4494f79a0dbc9 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4063,7 +4063,7 @@ PHP_METHOD(DateTimeZone, __construct) } /* }}} */ -static bool php_date_timezone_initialize_from_hash(zval **return_value, php_timezone_obj **tzobj, const HashTable *myht) /* {{{ */ +static bool php_date_timezone_initialize_from_hash(php_timezone_obj **tzobj, const HashTable *myht) /* {{{ */ { zval *z_timezone_type; @@ -4104,7 +4104,7 @@ PHP_METHOD(DateTimeZone, __set_state) php_date_instantiate(date_ce_timezone, return_value); tzobj = Z_PHPTIMEZONE_P(return_value); - if (!php_date_timezone_initialize_from_hash(&return_value, &tzobj, myht)) { + if (!php_date_timezone_initialize_from_hash(&tzobj, myht)) { zend_throw_error(NULL, "Invalid serialization data for DateTimeZone object"); RETURN_THROWS(); } @@ -4124,7 +4124,7 @@ PHP_METHOD(DateTimeZone, __wakeup) myht = Z_OBJPROP_P(object); - if (!php_date_timezone_initialize_from_hash(&return_value, &tzobj, myht)) { + if (!php_date_timezone_initialize_from_hash(&tzobj, myht)) { zend_throw_error(NULL, "Invalid serialization data for DateTimeZone object"); RETURN_THROWS(); } @@ -4188,7 +4188,7 @@ PHP_METHOD(DateTimeZone, __unserialize) tzobj = Z_PHPTIMEZONE_P(object); - if (!php_date_timezone_initialize_from_hash(&object, &tzobj, myht)) { + if (!php_date_timezone_initialize_from_hash(&tzobj, myht)) { zend_throw_error(NULL, "Invalid serialization data for DateTimeZone object"); RETURN_THROWS(); } @@ -4613,7 +4613,7 @@ PHP_METHOD(DateInterval, __construct) } /* }}} */ -static void php_date_interval_initialize_from_hash(zval **return_value, php_interval_obj **intobj, const HashTable *myht) /* {{{ */ +static void php_date_interval_initialize_from_hash(php_interval_obj **intobj, const HashTable *myht) /* {{{ */ { /* If we have a date_string, use that instead */ const zval *date_str = zend_hash_str_find(myht, "date_string", strlen("date_string")); @@ -4752,7 +4752,7 @@ PHP_METHOD(DateInterval, __set_state) php_date_instantiate(date_ce_interval, return_value); intobj = Z_PHPINTERVAL_P(return_value); - php_date_interval_initialize_from_hash(&return_value, &intobj, myht); + php_date_interval_initialize_from_hash(&intobj, myht); } /* }}} */ @@ -4823,7 +4823,7 @@ PHP_METHOD(DateInterval, __unserialize) intervalobj = Z_PHPINTERVAL_P(object); - php_date_interval_initialize_from_hash(&object, &intervalobj, myht); + php_date_interval_initialize_from_hash(&intervalobj, myht); restore_custom_dateinterval_properties(object, myht); } /* }}} */ @@ -4841,7 +4841,7 @@ PHP_METHOD(DateInterval, __wakeup) myht = Z_OBJPROP_P(object); - php_date_interval_initialize_from_hash(&return_value, &intobj, myht); + php_date_interval_initialize_from_hash(&intobj, myht); } /* }}} */ From 012cb591eb21bb88ae365bef115aeea8f91ac163 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+ndossche@users.noreply.github.com> Date: Tue, 23 Dec 2025 00:37:29 +0100 Subject: [PATCH 2/2] date: Avoid passing objects using double pointers Using single pointers is cleaner and also generates better machine code. --- ext/date/php_date.c | 54 ++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 4494f79a0dbc9..8f98589b2b47e 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4613,7 +4613,7 @@ PHP_METHOD(DateInterval, __construct) } /* }}} */ -static void php_date_interval_initialize_from_hash(php_interval_obj **intobj, const HashTable *myht) /* {{{ */ +static void php_date_interval_initialize_from_hash(php_interval_obj *intobj, const HashTable *myht) /* {{{ */ { /* If we have a date_string, use that instead */ const zval *date_str = zend_hash_str_find(myht, "date_string", strlen("date_string")); @@ -4635,15 +4635,15 @@ static void php_date_interval_initialize_from_hash(php_interval_obj **intobj, co } /* If ->diff is already set, then we need to free it first */ - if ((*intobj)->diff) { - timelib_rel_time_dtor((*intobj)->diff); + if (intobj->diff) { + timelib_rel_time_dtor(intobj->diff); } - (*intobj)->diff = timelib_rel_time_clone(&time->relative); - (*intobj)->initialized = true; - (*intobj)->civil_or_wall = PHP_DATE_CIVIL; - (*intobj)->from_string = true; - (*intobj)->date_string = zend_string_copy(Z_STR_P(date_str)); + intobj->diff = timelib_rel_time_clone(&time->relative); + intobj->initialized = true; + intobj->civil_or_wall = PHP_DATE_CIVIL; + intobj->from_string = true; + intobj->date_string = zend_string_copy(Z_STR_P(date_str)); timelib_time_dtor(time); timelib_error_container_dtor(err); @@ -4652,20 +4652,20 @@ static void php_date_interval_initialize_from_hash(php_interval_obj **intobj, co } /* If ->diff is already set, then we need to free it first */ - if ((*intobj)->diff) { - timelib_rel_time_dtor((*intobj)->diff); + if (intobj->diff) { + timelib_rel_time_dtor(intobj->diff); } /* Set new value */ - (*intobj)->diff = timelib_rel_time_ctor(); + intobj->diff = timelib_rel_time_ctor(); #define PHP_DATE_INTERVAL_READ_PROPERTY(element, member, itype, def) \ do { \ zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \ if (z_arg && Z_TYPE_P(z_arg) <= IS_STRING) { \ - (*intobj)->diff->member = (itype)zval_get_long(z_arg); \ + intobj->diff->member = (itype)zval_get_long(z_arg); \ } else { \ - (*intobj)->diff->member = (itype)def; \ + intobj->diff->member = (itype)def; \ } \ } while (0); @@ -4675,10 +4675,10 @@ static void php_date_interval_initialize_from_hash(php_interval_obj **intobj, co if (z_arg && Z_TYPE_P(z_arg) <= IS_STRING) { \ zend_string *tmp_str; \ zend_string *str = zval_get_tmp_string(z_arg, &tmp_str); \ - DATE_A64I((*intobj)->diff->member, ZSTR_VAL(str)); \ + DATE_A64I(intobj->diff->member, ZSTR_VAL(str)); \ zend_tmp_string_release(tmp_str); \ } else { \ - (*intobj)->diff->member = -1LL; \ + intobj->diff->member = -1LL; \ } \ } while (0); @@ -4686,14 +4686,14 @@ static void php_date_interval_initialize_from_hash(php_interval_obj **intobj, co do { \ zval *z_arg = zend_hash_str_find(myht, "days", sizeof("days") - 1); \ if (z_arg && Z_TYPE_P(z_arg) == IS_FALSE) { \ - (*intobj)->diff->member = TIMELIB_UNSET; \ + intobj->diff->member = TIMELIB_UNSET; \ } else if (z_arg && Z_TYPE_P(z_arg) <= IS_STRING) { \ zend_string *tmp_str; \ zend_string *str = zval_get_tmp_string(z_arg, &tmp_str); \ - DATE_A64I((*intobj)->diff->member, ZSTR_VAL(str)); \ + DATE_A64I(intobj->diff->member, ZSTR_VAL(str)); \ zend_tmp_string_release(tmp_str); \ } else { \ - (*intobj)->diff->member = -1LL; \ + intobj->diff->member = -1LL; \ } \ } while (0); @@ -4701,9 +4701,9 @@ static void php_date_interval_initialize_from_hash(php_interval_obj **intobj, co do { \ zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \ if (z_arg) { \ - (*intobj)->diff->member = (double)zval_get_double(z_arg); \ + intobj->diff->member = (double)zval_get_double(z_arg); \ } else { \ - (*intobj)->diff->member = (double)def; \ + intobj->diff->member = (double)def; \ } \ } while (0); @@ -4716,7 +4716,7 @@ static void php_date_interval_initialize_from_hash(php_interval_obj **intobj, co { const zval *z_arg = zend_hash_str_find(myht, "f", sizeof("f") - 1); if (z_arg) { - (*intobj)->diff->us = zend_dval_to_lval(zval_get_double(z_arg) * 1000000.0); + intobj->diff->us = zend_dval_to_lval(zval_get_double(z_arg) * 1000000.0); } } PHP_DATE_INTERVAL_READ_PROPERTY("weekday", weekday, int, -1) @@ -4730,14 +4730,14 @@ static void php_date_interval_initialize_from_hash(php_interval_obj **intobj, co PHP_DATE_INTERVAL_READ_PROPERTY("have_special_relative", have_special_relative, unsigned int, 0); { const zval *z_arg = zend_hash_str_find(myht, "civil_or_wall", sizeof("civil_or_wall") - 1); - (*intobj)->civil_or_wall = PHP_DATE_CIVIL; + intobj->civil_or_wall = PHP_DATE_CIVIL; if (z_arg) { zend_long val = zval_get_long(z_arg); - (*intobj)->civil_or_wall = val; + intobj->civil_or_wall = val; } } - (*intobj)->initialized = true; + intobj->initialized = true; } /* }}} */ /* {{{ */ @@ -4752,7 +4752,7 @@ PHP_METHOD(DateInterval, __set_state) php_date_instantiate(date_ce_interval, return_value); intobj = Z_PHPINTERVAL_P(return_value); - php_date_interval_initialize_from_hash(&intobj, myht); + php_date_interval_initialize_from_hash(intobj, myht); } /* }}} */ @@ -4823,7 +4823,7 @@ PHP_METHOD(DateInterval, __unserialize) intervalobj = Z_PHPINTERVAL_P(object); - php_date_interval_initialize_from_hash(&intervalobj, myht); + php_date_interval_initialize_from_hash(intervalobj, myht); restore_custom_dateinterval_properties(object, myht); } /* }}} */ @@ -4841,7 +4841,7 @@ PHP_METHOD(DateInterval, __wakeup) myht = Z_OBJPROP_P(object); - php_date_interval_initialize_from_hash(&intobj, myht); + php_date_interval_initialize_from_hash(intobj, myht); } /* }}} */