aharvey                                  Fri, 26 Mar 2010 04:31:26 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=296828

Log:
Fixed bug #51393 (DateTime::createFromFormat() fails if format string contains 
timezone).

Bug: http://bugs.php.net/51393 (Assigned) DateTime::createFromFormat() fails if 
format string contains timezone
      
Changed paths:
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.c
    U   php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.re
    U   php/php-src/branches/PHP_5_3/ext/date/lib/parse_iso_intervals.c
    U   php/php-src/branches/PHP_5_3/ext/date/lib/parse_iso_intervals.re
    A   php/php-src/branches/PHP_5_3/ext/date/tests/bug51393.phpt
    U   php/php-src/trunk/ext/date/lib/parse_date.c
    U   php/php-src/trunk/ext/date/lib/parse_date.re
    U   php/php-src/trunk/ext/date/lib/parse_iso_intervals.c
    U   php/php-src/trunk/ext/date/lib/parse_iso_intervals.re
    A   php/php-src/trunk/ext/date/tests/bug51393.phpt

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS	2010-03-25 23:02:20 UTC (rev 296827)
+++ php/php-src/branches/PHP_5_3/NEWS	2010-03-26 04:31:26 UTC (rev 296828)
@@ -9,6 +9,8 @@
 - Fixed a NULL pointer dereference when processing invalid XML-RPC
   requests (Fixes CVE-2010-0397, bug #51288). (Raphael Geissert)

+- Fixed bug #51393 (DateTime::createFromFormat() fails if format string contains
+  timezone). (Adam)
 - Fixed bug #51338 (URL-Rewriter is still enabled if use_only_cookies is
   on). (Ilia, j dot jeising at gmail dot com)
 - Fixed bug #51269 (zlib.output_compression Overwrites Vary Header). (Adam)

Modified: php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.c	2010-03-25 23:02:20 UTC (rev 296827)
+++ php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.c	2010-03-26 04:31:26 UTC (rev 296828)
@@ -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:00:44 2010 */
 #line 1 "ext/date/lib/parse_date.re"
 /*
    +----------------------------------------------------------------------+
@@ -526,7 +526,7 @@
 	char *begin = *ptr, *end;
 	long  tmp;

-	while (**ptr != '\0') {
+	while (isdigit(**ptr) || **ptr == ':') {
 		++*ptr;
 	}
 	end = *ptr;

Modified: php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.re
===================================================================
--- php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.re	2010-03-25 23:02:20 UTC (rev 296827)
+++ php/php-src/branches/PHP_5_3/ext/date/lib/parse_date.re	2010-03-26 04:31:26 UTC (rev 296828)
@@ -524,7 +524,7 @@
 	char *begin = *ptr, *end;
 	long  tmp;

-	while (**ptr != '\0') {
+	while (isdigit(**ptr) || **ptr == ':') {
 		++*ptr;
 	}
 	end = *ptr;

Modified: php/php-src/branches/PHP_5_3/ext/date/lib/parse_iso_intervals.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/date/lib/parse_iso_intervals.c	2010-03-25 23:02:20 UTC (rev 296827)
+++ php/php-src/branches/PHP_5_3/ext/date/lib/parse_iso_intervals.c	2010-03-26 04:31:26 UTC (rev 296828)
@@ -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:12:03 2010 */
 #line 1 "ext/date/lib/parse_iso_intervals.re"
 /*
    +----------------------------------------------------------------------+
@@ -183,7 +183,7 @@
 	char *begin = *ptr, *end;
 	long  tmp;

-	while (**ptr != '\0') {
+	while (isdigit(**ptr) || **ptr == ':') {
 		++*ptr;
 	}
 	end = *ptr;

Modified: php/php-src/branches/PHP_5_3/ext/date/lib/parse_iso_intervals.re
===================================================================
--- php/php-src/branches/PHP_5_3/ext/date/lib/parse_iso_intervals.re	2010-03-25 23:02:20 UTC (rev 296827)
+++ php/php-src/branches/PHP_5_3/ext/date/lib/parse_iso_intervals.re	2010-03-26 04:31:26 UTC (rev 296828)
@@ -181,7 +181,7 @@
 	char *begin = *ptr, *end;
 	long  tmp;

-	while (**ptr != '\0') {
+	while (isdigit(**ptr) || **ptr == ':') {
 		++*ptr;
 	}
 	end = *ptr;

Added: php/php-src/branches/PHP_5_3/ext/date/tests/bug51393.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/date/tests/bug51393.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/date/tests/bug51393.phpt	2010-03-26 04:31:26 UTC (rev 296828)
@@ -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)

Modified: php/php-src/trunk/ext/date/lib/parse_date.c
===================================================================
--- php/php-src/trunk/ext/date/lib/parse_date.c	2010-03-25 23:02:20 UTC (rev 296827)
+++ php/php-src/trunk/ext/date/lib/parse_date.c	2010-03-26 04:31:26 UTC (rev 296828)
@@ -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 @@
 	char *begin = *ptr, *end;
 	long  tmp;

-	while (**ptr != '\0') {
+	while (isdigit(**ptr) || **ptr == ':') {
 		++*ptr;
 	}
 	end = *ptr;

Modified: php/php-src/trunk/ext/date/lib/parse_date.re
===================================================================
--- php/php-src/trunk/ext/date/lib/parse_date.re	2010-03-25 23:02:20 UTC (rev 296827)
+++ php/php-src/trunk/ext/date/lib/parse_date.re	2010-03-26 04:31:26 UTC (rev 296828)
@@ -524,7 +524,7 @@
 	char *begin = *ptr, *end;
 	long  tmp;

-	while (**ptr != '\0') {
+	while (isdigit(**ptr) || **ptr == ':') {
 		++*ptr;
 	}
 	end = *ptr;

Modified: php/php-src/trunk/ext/date/lib/parse_iso_intervals.c
===================================================================
--- php/php-src/trunk/ext/date/lib/parse_iso_intervals.c	2010-03-25 23:02:20 UTC (rev 296827)
+++ php/php-src/trunk/ext/date/lib/parse_iso_intervals.c	2010-03-26 04:31:26 UTC (rev 296828)
@@ -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 @@
 	char *begin = *ptr, *end;
 	long  tmp;

-	while (**ptr != '\0') {
+	while (isdigit(**ptr) || **ptr == ':') {
 		++*ptr;
 	}
 	end = *ptr;

Modified: php/php-src/trunk/ext/date/lib/parse_iso_intervals.re
===================================================================
--- php/php-src/trunk/ext/date/lib/parse_iso_intervals.re	2010-03-25 23:02:20 UTC (rev 296827)
+++ php/php-src/trunk/ext/date/lib/parse_iso_intervals.re	2010-03-26 04:31:26 UTC (rev 296828)
@@ -181,7 +181,7 @@
 	char *begin = *ptr, *end;
 	long  tmp;

-	while (**ptr != '\0') {
+	while (isdigit(**ptr) || **ptr == ':') {
 		++*ptr;
 	}
 	end = *ptr;

Added: php/php-src/trunk/ext/date/tests/bug51393.phpt
===================================================================
--- php/php-src/trunk/ext/date/tests/bug51393.phpt	                        (rev 0)
+++ php/php-src/trunk/ext/date/tests/bug51393.phpt	2010-03-26 04:31:26 UTC (rev 296828)
@@ -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)
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to