From 6770158d474fa442ce55bba4ec32dd2703828b33 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Fri, 27 May 2022 13:47:52 +0100 Subject: [PATCH] Only warn when an incorrect timezone is set through 'date.timezone' --- ext/date/php_date.c | 20 +++++++++---------- ext/date/tests/bug73239.phpt | 3 +-- .../tests/date_default_timezone_get-1.phpt | 1 + .../tests/date_default_timezone_get-2.phpt | 1 + .../tests/date_default_timezone_get-4.phpt | 2 +- .../tests/date_default_timezone_set-1.phpt | 3 ++- ext/date/tests/ini_set_incorrect.phpt | 2 +- .../tests/dateformat_invalid_timezone.phpt | 5 +++-- sapi/cli/tests/006.phpt | 2 +- 9 files changed, 20 insertions(+), 19 deletions(-) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index ed0880e2254..d9aa2a08d9c 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -224,7 +224,7 @@ static PHP_INI_MH(OnUpdate_date_timezone); /* {{{ INI Settings */ PHP_INI_BEGIN() - STD_PHP_INI_ENTRY("date.timezone", "", PHP_INI_ALL, OnUpdate_date_timezone, default_timezone, zend_date_globals, date_globals) + STD_PHP_INI_ENTRY("date.timezone", "UTC", PHP_INI_ALL, OnUpdate_date_timezone, default_timezone, zend_date_globals, date_globals) PHP_INI_ENTRY("date.default_latitude", DATE_DEFAULT_LATITUDE, PHP_INI_ALL, NULL) PHP_INI_ENTRY("date.default_longitude", DATE_DEFAULT_LONGITUDE, PHP_INI_ALL, NULL) PHP_INI_ENTRY("date.sunset_zenith", DATE_SUNSET_ZENITH, PHP_INI_ALL, NULL) @@ -478,20 +478,18 @@ timelib_tzinfo *php_date_parse_tzfile_wrapper(const char *formal_tzname, const t /* {{{ static PHP_INI_MH(OnUpdate_date_timezone) */ static PHP_INI_MH(OnUpdate_date_timezone) { + DATEG(timezone_valid) = 0; + + if (new_value && ZSTR_VAL(new_value) && !timelib_timezone_id_is_valid(ZSTR_VAL(new_value), DATE_TIMEZONEDB)) { + php_error_docref(NULL, E_WARNING, "Invalid date.timezone value '%s', using 'UTC' instead", ZSTR_VAL(new_value)); + return FAILURE; + } + if (OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage) == FAILURE) { return FAILURE; } - DATEG(timezone_valid) = 0; - if (stage == PHP_INI_STAGE_RUNTIME) { - if (!timelib_timezone_id_is_valid(DATEG(default_timezone), DATE_TIMEZONEDB)) { - if (DATEG(default_timezone) && *DATEG(default_timezone)) { - php_error_docref(NULL, E_WARNING, "Invalid date.timezone value '%s'", DATEG(default_timezone)); - } - } else { - DATEG(timezone_valid) = 1; - } - } + DATEG(timezone_valid) = 1; return SUCCESS; } diff --git a/ext/date/tests/bug73239.phpt b/ext/date/tests/bug73239.phpt index 079ae31d3f4..ea5eec4bdd7 100644 --- a/ext/date/tests/bug73239.phpt +++ b/ext/date/tests/bug73239.phpt @@ -10,5 +10,4 @@ try { } ?> --EXPECTF-- -Warning: ini_set(): Invalid date.timezone value 'dummy' in %sbug73239.php on line %d -DateTime::__construct(): UTC was used as timezone, because the date.timezone value 'dummy' is invalid +Warning: ini_set(): Invalid date.timezone value 'dummy', using 'UTC' instead in %sbug73239.php on line %d diff --git a/ext/date/tests/date_default_timezone_get-1.phpt b/ext/date/tests/date_default_timezone_get-1.phpt index fc466d411d1..3164ba7554e 100644 --- a/ext/date/tests/date_default_timezone_get-1.phpt +++ b/ext/date/tests/date_default_timezone_get-1.phpt @@ -13,5 +13,6 @@ date.timezone= echo date('e'), "\n"; ?> --EXPECT-- +Warning: PHP Startup: Invalid date.timezone value '', using 'UTC' instead in Unknown on line 0 UTC UTC diff --git a/ext/date/tests/date_default_timezone_get-2.phpt b/ext/date/tests/date_default_timezone_get-2.phpt index 44d94cd76f2..d79d8de07a4 100644 --- a/ext/date/tests/date_default_timezone_get-2.phpt +++ b/ext/date/tests/date_default_timezone_get-2.phpt @@ -12,4 +12,5 @@ date.timezone= echo date_default_timezone_get(), "\n"; ?> --EXPECT-- +Warning: PHP Startup: Invalid date.timezone value '', using 'UTC' instead in Unknown on line 0 UTC diff --git a/ext/date/tests/date_default_timezone_get-4.phpt b/ext/date/tests/date_default_timezone_get-4.phpt index 1d56bcb265e..dc9fac3ee90 100644 --- a/ext/date/tests/date_default_timezone_get-4.phpt +++ b/ext/date/tests/date_default_timezone_get-4.phpt @@ -7,5 +7,5 @@ date.timezone=Incorrect/Zone echo date_default_timezone_get(), "\n"; ?> --EXPECTF-- -Warning: date_default_timezone_get(): UTC was used as timezone, because the date.timezone value 'Incorrect/Zone' is invalid in %sdate_default_timezone_get-4.php on line %d +Warning: PHP Startup: Invalid date.timezone value 'Incorrect/Zone', using 'UTC' instead in %s on line %d UTC diff --git a/ext/date/tests/date_default_timezone_set-1.phpt b/ext/date/tests/date_default_timezone_set-1.phpt index 54f1fa73f3b..d4e5d9157ce 100644 --- a/ext/date/tests/date_default_timezone_set-1.phpt +++ b/ext/date/tests/date_default_timezone_set-1.phpt @@ -21,7 +21,8 @@ date.timezone= echo date(DATE_ISO8601, $date3), "\n"; echo date(DATE_ISO8601, $date4), "\n"; ?> ---EXPECT-- +--EXPECTF-- +Warning: PHP Startup: Invalid date.timezone value '', using 'UTC' instead in %s on line %d America/Indiana/Knox 2005-01-12T03:00:00-0500 2005-07-12T03:00:00-0500 diff --git a/ext/date/tests/ini_set_incorrect.phpt b/ext/date/tests/ini_set_incorrect.phpt index 47e23a073a8..d5746883fcf 100644 --- a/ext/date/tests/ini_set_incorrect.phpt +++ b/ext/date/tests/ini_set_incorrect.phpt @@ -7,4 +7,4 @@ ini_set("date.timezone", "Incorrect/Zone"); ?> --EXPECTF-- -Warning: ini_set(): Invalid date.timezone value 'Incorrect/Zone' in %sini_set_incorrect.php on line %d +Warning: ini_set(): Invalid date.timezone value 'Incorrect/Zone', using 'UTC' instead in %sini_set_incorrect.php on line %d diff --git a/ext/intl/tests/dateformat_invalid_timezone.phpt b/ext/intl/tests/dateformat_invalid_timezone.phpt index dcb3fd46c27..f618502c2fd 100644 --- a/ext/intl/tests/dateformat_invalid_timezone.phpt +++ b/ext/intl/tests/dateformat_invalid_timezone.phpt @@ -14,5 +14,6 @@ try { echo $e->getMessage(); } ?> ---EXPECT-- -IntlDateFormatter::__construct(): UTC was used as timezone, because the date.timezone value 'Mars/Utopia_Planitia' is invalid +--EXPECTF-- +Warning: PHP Startup: Invalid date.timezone value 'Mars/Utopia_Planitia', using 'UTC' instead in %s on line %d +Wat? diff --git a/sapi/cli/tests/006.phpt b/sapi/cli/tests/006.phpt index 4f33e37c710..1f2af9c6b63 100644 --- a/sapi/cli/tests/006.phpt +++ b/sapi/cli/tests/006.phpt @@ -11,7 +11,7 @@ if (PCRE_JIT_SUPPORT == false) { } ?> --INI-- -date.timezone= +date.timezone=UTC --FILE--