diff options
author | Anatol Belski <ab@php.net> | 2014-04-25 17:23:26 +0200 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2014-04-25 17:23:26 +0200 |
commit | c1aa9baf29d1a20fa60c1cef3979a80014f6677b (patch) | |
tree | 8a781678310ae0be2e4682806d8a11b4d46171bc | |
parent | 03c703b8bd55679edf30fe17529fab0c2281b01f (diff) | |
download | php-git-c1aa9baf29d1a20fa60c1cef3979a80014f6677b.tar.gz |
Fixed bug #67118 DateTime constructor crash with invalid data
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | ext/date/php_date.c | 4 | ||||
-rw-r--r-- | ext/date/tests/bug67118.phpt | 27 |
3 files changed, 33 insertions, 1 deletions
@@ -7,6 +7,9 @@ PHP NEWS by tempnam()). (Boro Sitnikovski) . Fixed bug #67072 (Echoing unserialized "SplFileObject" crash). (Anatol) +- Date: + . Fixed bug #67118 (DateTime constructor crash with invalid data). (Anatol) + - DOM: . Fixed bug #67081 (DOMDocumentType->internalSubset returns entire DOCTYPE tag, not only the subset). (Anatol) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 4a37961b02..d4058ebee8 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2548,7 +2548,9 @@ PHP_METHOD(DateTime, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { - php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); + if (!php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC)) { + ZVAL_NULL(getThis()); + } } zend_restore_error_handling(&error_handling TSRMLS_CC); } diff --git a/ext/date/tests/bug67118.phpt b/ext/date/tests/bug67118.phpt new file mode 100644 index 0000000000..b10e9eaea3 --- /dev/null +++ b/ext/date/tests/bug67118.phpt @@ -0,0 +1,27 @@ +--TEST-- +Bug #67118 php-cgi crashes regularly on IIS 7 +--INI-- +date.timezone=Europe/Berlin +--FILE-- +<?php +class mydt extends datetime +{ + publi function __construct($tits\bug67118.phpte = 'now', $tz = NULL, $format = NULL) + { + if (!empty($tz) && !is_object($tz)) { + $tz = new DateTimeZone($tz); + } + + @parent::__construct($time, $tz); + } + +}; + +new mydt("Funktionsansvarig rÄdgivning och juridik", "UTC"); +--EXPECTF-- +Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (Funktionsansvarig rÄdgivning och juridik) at position 0 (F): The timezone could not be found in the database' in %sbug67118.php:%d +Stack trace: +#0 %sbug67118.php(%d): DateTime->__construct('Funktionsansvar...', Object(DateTimeZone)) +#1 %sbug67118.php(%d): mydt->__construct('Funktionsansvar...', 'UTC') +#2 {main} + thrown in %sbug67118.php on line %d |