summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--ext/date/lib/parse_date.c4
-rw-r--r--ext/date/lib/parse_date.re2
-rw-r--r--ext/date/lib/parse_iso_intervals.c4
-rw-r--r--ext/date/lib/parse_iso_intervals.re2
-rw-r--r--ext/date/tests/bug51393.phpt73
6 files changed, 81 insertions, 6 deletions
diff --git a/NEWS b/NEWS
index d432332a26..8a141e314a 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,8 @@ PHP NEWS
- 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)
diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c
index 7cd3e5f45c..3d76fa8b98 100644
--- a/ext/date/lib/parse_date.c
+++ b/ext/date/lib/parse_date.c
@@ -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 @@ 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/lib/parse_date.re b/ext/date/lib/parse_date.re
index 59feef9eb3..4eae69376b 100644
--- a/ext/date/lib/parse_date.re
+++ b/ext/date/lib/parse_date.re
@@ -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;
diff --git a/ext/date/lib/parse_iso_intervals.c b/ext/date/lib/parse_iso_intervals.c
index cc58f1dc60..a08dcc4b56 100644
--- a/ext/date/lib/parse_iso_intervals.c
+++ b/ext/date/lib/parse_iso_intervals.c
@@ -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 @@ 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/lib/parse_iso_intervals.re b/ext/date/lib/parse_iso_intervals.re
index eb861a1a6b..bf2c287276 100644
--- a/ext/date/lib/parse_iso_intervals.re
+++ b/ext/date/lib/parse_iso_intervals.re
@@ -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
index 0000000000..c4c4d61a1e
--- /dev/null
+++ b/ext/date/tests/bug51393.phpt
@@ -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)