]> granicus.if.org Git - php/commitdiff
Fixed bug #51393 (DateTime::createFromFormat() fails if format string contains timezone).
authorAdam Harvey <aharvey@php.net>
Fri, 26 Mar 2010 04:31:26 +0000 (04:31 +0000)
committerAdam Harvey <aharvey@php.net>
Fri, 26 Mar 2010 04:31:26 +0000 (04:31 +0000)
ext/date/lib/parse_date.c
ext/date/lib/parse_date.re
ext/date/lib/parse_iso_intervals.c
ext/date/lib/parse_iso_intervals.re
ext/date/tests/bug51393.phpt [new file with mode: 0644]

index 7cd3e5f45ca3221deb79bd04abfe1e4238cac641..f193ff4e66403af5e2925d7caa1af58312a2fa55 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Sun Mar  7 18:37:37 2010 */
+/* Generated by re2c 0.13.5 on Fri Mar 26 12:26:56 2010 */
 #line 1 "ext/date/lib/parse_date.re"
 /*
    +----------------------------------------------------------------------+
@@ -526,7 +526,7 @@ static long timelib_parse_tz_cor(char **ptr)
        char *begin = *ptr, *end;
        long  tmp;
 
-       while (**ptr != '\0') {
+       while (isdigit(**ptr) || **ptr == ':') {
                ++*ptr;
        }
        end = *ptr;
index 59feef9eb37695e866379ef78cbb441aa2eeaf81..4eae69376b9a52a89b416312aab49ff7fab8b019 100644 (file)
@@ -524,7 +524,7 @@ static long timelib_parse_tz_cor(char **ptr)
        char *begin = *ptr, *end;
        long  tmp;
 
-       while (**ptr != '\0') {
+       while (isdigit(**ptr) || **ptr == ':') {
                ++*ptr;
        }
        end = *ptr;
index cc58f1dc60be779841ac73cef9b088d49d18a20e..9199faa79c17da3b531d51ea24943bd6de247be5 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Sun Mar  7 14:12:01 2010 */
+/* Generated by re2c 0.13.5 on Fri Mar 26 12:26:54 2010 */
 #line 1 "ext/date/lib/parse_iso_intervals.re"
 /*
    +----------------------------------------------------------------------+
@@ -183,7 +183,7 @@ static long timelib_parse_tz_cor(char **ptr)
        char *begin = *ptr, *end;
        long  tmp;
 
-       while (**ptr != '\0') {
+       while (isdigit(**ptr) || **ptr == ':') {
                ++*ptr;
        }
        end = *ptr;
index eb861a1a6b3a5ba0b70440c07e043f2c0cce86f0..bf2c287276f35b852940e0867688f7c41f35c43c 100644 (file)
@@ -181,7 +181,7 @@ static long timelib_parse_tz_cor(char **ptr)
        char *begin = *ptr, *end;
        long  tmp;
 
-       while (**ptr != '\0') {
+       while (isdigit(**ptr) || **ptr == ':') {
                ++*ptr;
        }
        end = *ptr;
diff --git a/ext/date/tests/bug51393.phpt b/ext/date/tests/bug51393.phpt
new file mode 100644 (file)
index 0000000..c4c4d61
--- /dev/null
@@ -0,0 +1,73 @@
+--TEST--
+Bug #51393 (DateTime::createFromFormat() fails if format string contains timezone)
+--FILE--
+<?php
+$dt = DateTime::createFromFormat('O', '+0800');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('P', '+08:00');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('O', '-0800');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('P', '-08:00');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('[O]', '[+0800]');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('[P]', '[+08:00]');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('[O]', '[-0800]');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('[P]', '[-08:00]');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('O', 'GMT+0800');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('P', 'GMT+08:00');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('O', 'GMT-0800');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('P', 'GMT-08:00');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('[O]', '[GMT+0800]');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('[P]', '[GMT+08:00]');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('[O]', '[GMT-0800]');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('[P]', '[GMT-08:00]');
+var_dump($dt->getOffset());
+
+$dt = DateTime::createFromFormat('O', 'invalid');
+var_dump($dt);
+?>
+--EXPECT--
+int(28800)
+int(28800)
+int(-28800)
+int(-28800)
+int(28800)
+int(28800)
+int(-28800)
+int(-28800)
+int(28800)
+int(28800)
+int(-28800)
+int(-28800)
+int(28800)
+int(28800)
+int(-28800)
+int(-28800)
+bool(false)