summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2014-05-13 16:52:17 -0700
committerStanislav Malyshev <stas@php.net>2014-05-13 16:52:45 -0700
commitdc92e81922405646f4e7f124d96643243088e0a6 (patch)
treee8558709fa60c0ebbacdfc8e5c429a8243a6d8f8
parent0094fd096905d2d3e53b12c76cfc27976dc2db03 (diff)
parent0a80849250162d89b674f7e65144e463e107b8cd (diff)
downloadphp-git-dc92e81922405646f4e7f124d96643243088e0a6.tar.gz
Merge branch 'bug67251' into PHP-5.4
* bug67251: Fix bug #67251 - date_parse_from_format out-of-bounds read Conflicts: ext/date/lib/parse_date.c
-rw-r--r--ext/date/lib/parse_date.c6
-rw-r--r--ext/date/lib/parse_date.re4
-rw-r--r--ext/date/tests/bug67251.phpt38
3 files changed, 47 insertions, 1 deletions
diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c
index 14a6d73c32..d7db06f4fc 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 Tue May 13 16:47:20 2014 */
+/* Generated by re2c 0.13.5 on Tue May 13 16:52:44 2014 */
#line 1 "ext/date/lib/parse_date.re"
/*
+----------------------------------------------------------------------+
@@ -25127,6 +25127,10 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim
break;
case '\\': /* escaped char */
+ if(!fptr[1]) {
+ add_pbf_error(s, "Escaped character expected", string, begin);
+ break;
+ }
fptr++;
if (*ptr == *fptr) {
++ptr;
diff --git a/ext/date/lib/parse_date.re b/ext/date/lib/parse_date.re
index dad5bb4b25..66efba1589 100644
--- a/ext/date/lib/parse_date.re
+++ b/ext/date/lib/parse_date.re
@@ -2134,6 +2134,10 @@ timelib_time *timelib_parse_from_format(char *format, char *string, int len, tim
break;
case '\\': /* escaped char */
+ if(!fptr[1]) {
+ add_pbf_error(s, "Escaped character expected", string, begin);
+ break;
+ }
fptr++;
if (*ptr == *fptr) {
++ptr;
diff --git a/ext/date/tests/bug67251.phpt b/ext/date/tests/bug67251.phpt
new file mode 100644
index 0000000000..68c56a1613
--- /dev/null
+++ b/ext/date/tests/bug67251.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Bug #67251 (date_parse_from_format out-of-bounds read)
+--INI--
+date.timezone=Europe/Berlin
+--FILE--
+<?php
+var_dump(date_parse_from_format("\\","AAAABBBB"));
+--EXPECT--
+array(12) {
+ ["year"]=>
+ bool(false)
+ ["month"]=>
+ bool(false)
+ ["day"]=>
+ bool(false)
+ ["hour"]=>
+ bool(false)
+ ["minute"]=>
+ bool(false)
+ ["second"]=>
+ bool(false)
+ ["fraction"]=>
+ bool(false)
+ ["warning_count"]=>
+ int(0)
+ ["warnings"]=>
+ array(0) {
+ }
+ ["error_count"]=>
+ int(2)
+ ["errors"]=>
+ array(1) {
+ [0]=>
+ string(13) "Trailing data"
+ }
+ ["is_localtime"]=>
+ bool(false)
+}