Bug #78139 [Com]: timezone_open accepts invalid timezone string argument
| From: | baby-luck at earthling dot net | Date: | Wed, 12 Jun 2019 17:31:19 +0000 |
| Subject: | Bug #78139 [Com]: timezone_open accepts invalid timezone string argument | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-221252@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=78139&edit=1
ID: 78139
Comment by: baby-luck at earthling dot net
Reported by: baby-luck at earthling dot net
Summary: timezone_open accepts invalid timezone string
argument
Status: Open
Type: Bug
Package: Date/time related
Operating System: Linux
PHP Version: 7.2.19
Block user comment: N
Private report: N
New Comment:
Did not know C,X were military offsets, thanks.
However, perhaps these qualify as a doc bug in themselves. The docs say "...an offset value
(+0200)" with no suggestion at all that a set of military offsets are also supported (probably
doesn't matter that they are case insensitive).
Regarding a) or b)... I would agree with those options; for the record my preference would be
heavily towards b).
Previous Comments:
------------------------------------------------------------------------
[2019-06-11 06:41:42] requinix@php.net
"C" and "X" are valid timezones: military notation representing each hourly
division from UTC+12 to UTC-12.
Either
a) this is a doc bug that it takes the first "word" in the string, or
b) this is a code bug and timezone_open should use the whole string
------------------------------------------------------------------------
[2019-06-11 06:30:14] baby-luck at earthling dot net
Description:
------------
timezone_open() accepts undocumented/nonsense/partial timezones.
The docs say "One of the supported timezone names or an offset value" but accepts
seemingly nonsense timezones without failure, and timezones found in the first non-whitespace block
in the argument string.
Test script:
---------------
$tz = timezone_open("x UTC");
echo '"x UTC" = '; var_dump($tz);
$tz = timezone_open("c");
echo '"c" = '; var_dump($tz);
$tz = timezone_open("xx UTC");
echo '"xx UTC" = '; var_dump($tz);
$tz = timezone_open("xUTC");
echo '"xUTC" = '; var_dump($tz);
$tz = timezone_open("UTCx");
echo '"UTCx" = '; var_dump($tz);
$tz = timezone_open("UTC xx");
echo '"UTC xx" = '; var_dump($tz);
Expected result:
----------------
"x UTC" = bool(false)
"c" = bool(false)
"xx UTC" = bool(false)
"xUTC" = bool(false)
"UTCx" = bool(false)
"UTC xx" = bool(false)
Actual result:
--------------
"x UTC" = object(DateTimeZone)#127 (2) {
["timezone_type"]=>
int(2)
["timezone"]=>
string(1) "X"
}
"c" = object(DateTimeZone)#128 (2) {
["timezone_type"]=>
int(2)
["timezone"]=>
string(1) "C"
}
"xx UTC" = bool(false)
"xUTC" = bool(false)
"UTCx" = bool(false)
"UTC xx" = object(DateTimeZone)#128 (2) {
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=78139&edit=1