From 6eecd5405d3fb42390641ca958d9ca558ed8ab46 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Thu, 5 Jun 2014 15:14:01 +0200 Subject: PHP 5.6: fix regression introduce in fix for #67118 --- php-reg67118.patch | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++ php56.spec | 7 ++- 2 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 php-reg67118.patch diff --git a/php-reg67118.patch b/php-reg67118.patch new file mode 100644 index 0000000..2c64c06 --- /dev/null +++ b/php-reg67118.patch @@ -0,0 +1,136 @@ +From 1fe9f1e4f572d7b4d5a3872f41ea61e71fb563bf Mon Sep 17 00:00:00 2001 +From: Remi Collet +Date: Thu, 5 Jun 2014 13:39:46 +0200 +Subject: [PATCH] Fix regression introduce in fix for bug #67118 + +The fix was correct but break some code (at least in Horde) +This is a temporary workaround to fix regressioni in 5.4, 5.5 and 5.6 + +This make php_date_initialize more consistent +- on success return 1 + time initiliazed +- on failure return 0 + time = zero + which is check by DATE_CHECK_INITIALIZED by later method call + +Will restore consistency with other date classes in master. +--- + ext/date/php_date.c | 6 +++--- + ext/date/tests/bug67118.phpt | 18 +++++++++--------- + 2 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/ext/date/php_date.c b/ext/date/php_date.c +index a2bf001..595b0b0 100644 +--- a/ext/date/php_date.c ++++ b/ext/date/php_date.c +@@ -2441,6 +2441,8 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, + err->error_messages[0].position, err->error_messages[0].character, err->error_messages[0].message); + } + if (err && err->error_count) { ++ timelib_time_dtor(dateobj->time); ++ dateobj->time = 0; + return 0; + } + +@@ -2548,9 +2550,7 @@ 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)) { +- 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()); +- } ++ php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); + } + zend_restore_error_handling(&error_handling TSRMLS_CC); + } +diff --git a/ext/date/tests/bug67118.phpt b/ext/date/tests/bug67118.phpt +index 6371757..973b4eb 100644 +--- a/ext/date/tests/bug67118.phpt ++++ b/ext/date/tests/bug67118.phpt +@@ -1,5 +1,5 @@ + --TEST-- +-Bug #67118 php-cgi crashes regularly on IIS 7 ++Bug #67118 crashes in DateTime when this used after failed __construct + --INI-- + date.timezone=Europe/Berlin + --FILE-- +@@ -12,16 +12,16 @@ + $tz = new DateTimeZone($tz); + } + +- @parent::__construct($time, $tz); ++ try { ++ @parent::__construct($time, $tz); ++ } catch (Exception $e) { ++ echo "Bad date" . $this->format("Y") . "\n"; ++ } + } + + }; + + 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 ++Warning: DateTime::format(): The DateTime object has not been correctly initialized by its constructor in %sbug67118.php on line %d ++Bad date +-- +1.9.2 + +From 15d8c80ead75be976c18a66b0933cf52f3e6579f Mon Sep 17 00:00:00 2001 +From: Remi Collet +Date: Thu, 5 Jun 2014 14:00:00 +0200 +Subject: [PATCH] add test for previous fix + +--- + ext/date/tests/bug67118_2.phpt | 35 +++++++++++++++++++++++++++++++++++ + 1 file changed, 35 insertions(+) + create mode 100644 ext/date/tests/bug67118_2.phpt + +diff --git a/ext/date/tests/bug67118_2.phpt b/ext/date/tests/bug67118_2.phpt +new file mode 100644 +index 0000000..b517a3b +--- /dev/null ++++ b/ext/date/tests/bug67118_2.phpt +@@ -0,0 +1,35 @@ ++--TEST-- ++Regression introduce in fix for Bug #67118 ++--INI-- ++date.timezone=Europe/Paris ++--FILE-- ++ ++Done ++--EXPECTF-- ++First try ++Second try ++object(Foo)#1 (3) { ++ ["date"]=> ++ string(26) "2007-09-12 15:49:12.000000" ++ ["timezone_type"]=> ++ int(3) ++ ["timezone"]=> ++ string(3) "UTC" ++} ++Done +\ No newline at end of file +-- +1.9.2 + diff --git a/php56.spec b/php56.spec index 60060ec..303bfd5 100644 --- a/php56.spec +++ b/php56.spec @@ -124,7 +124,7 @@ Summary: PHP scripting language for creating dynamic web sites Name: php Version: 5.6.0 %if 0%{?snapdate:1}%{?rcver:1} -Release: 0.9.%{?snapdate}%{?rcver}%{?dist} +Release: 0.10.%{?snapdate}%{?rcver}%{?dist} %else Release: 1%{?dist} %endif @@ -185,6 +185,7 @@ Patch47: php-5.4.9-phpinfo.patch Patch91: php-5.3.7-oci8conf.patch # Upstream fixes (100+) +Patch100: php-reg67118.patch # Security fixes (200+) @@ -907,6 +908,7 @@ rm -rf ext/json %patch91 -p1 -b .remi-oci8 # upstream patches +%patch100 -p1 -b .reg67118 # security patches @@ -1909,6 +1911,9 @@ fi %changelog +* Thu Jun 5 2014 Remi Collet 5.6.0-0.10.beta4 +- fix regression introduce in fix for #67118 + * Wed Jun 4 2014 Remi Collet 5.6.0-0.9.beta4 - php 5.6.0beta4 -- cgit