carlwgeorge / rpms / php

Forked from rpms/php 5 years ago
Clone
adddf70
From 1fe9f1e4f572d7b4d5a3872f41ea61e71fb563bf Mon Sep 17 00:00:00 2001
adddf70
From: Remi Collet <remi@php.net>
adddf70
Date: Thu, 5 Jun 2014 13:39:46 +0200
adddf70
Subject: [PATCH] Fix regression introduce in fix for bug #67118
adddf70
adddf70
The fix was correct but break some code (at least in Horde)
adddf70
This is a temporary workaround to fix regressioni in 5.4, 5.5 and 5.6
adddf70
adddf70
This make php_date_initialize more consistent
adddf70
- on success return 1 + time initiliazed
adddf70
- on failure return 0 + time = zero
adddf70
  which is check by DATE_CHECK_INITIALIZED by later method call
adddf70
adddf70
Will restore consistency with other date classes in master.
adddf70
---
adddf70
 ext/date/php_date.c          |  6 +++---
adddf70
 ext/date/tests/bug67118.phpt | 18 +++++++++---------
adddf70
 2 files changed, 12 insertions(+), 12 deletions(-)
adddf70
adddf70
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
adddf70
index a2bf001..595b0b0 100644
adddf70
--- a/ext/date/php_date.c
adddf70
+++ b/ext/date/php_date.c
adddf70
@@ -2441,6 +2441,8 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str,
adddf70
 			err->error_messages[0].position, err->error_messages[0].character, err->error_messages[0].message);
adddf70
 	}
adddf70
 	if (err && err->error_count) {
adddf70
+		timelib_time_dtor(dateobj->time);
adddf70
+		dateobj->time = 0;
adddf70
 		return 0;
adddf70
 	}
adddf70
 
adddf70
@@ -2548,9 +2550,7 @@ PHP_METHOD(DateTime, __construct)
adddf70
 
adddf70
 	zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC);
adddf70
 	if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) {
adddf70
-		if (!php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC)) {
adddf70
-			ZVAL_NULL(getThis());
adddf70
-		}
adddf70
+		php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC);
adddf70
 	}
adddf70
 	zend_restore_error_handling(&error_handling TSRMLS_CC);
adddf70
 }
adddf70
diff --git a/ext/date/tests/bug67118.phpt b/ext/date/tests/bug67118.phpt
adddf70
index 6371757..973b4eb 100644
adddf70
--- a/ext/date/tests/bug67118.phpt
adddf70
+++ b/ext/date/tests/bug67118.phpt
adddf70
@@ -1,5 +1,5 @@
adddf70
 --TEST--
adddf70
-Bug #67118 php-cgi crashes regularly on IIS 7
adddf70
+Bug #67118 crashes in DateTime when this used after failed __construct
adddf70
 --INI--
adddf70
 date.timezone=Europe/Berlin
adddf70
 --FILE--
adddf70
@@ -12,16 +12,16 @@
adddf70
 			$tz = new DateTimeZone($tz);
adddf70
 		}
adddf70
adddf70
-		@parent::__construct($time, $tz);
adddf70
+		try {
adddf70
+			@parent::__construct($time, $tz);
adddf70
+		} catch (Exception $e) {
adddf70
+			echo "Bad date" . $this->format("Y") . "\n";
adddf70
+		}
adddf70
 	}
adddf70
adddf70
 };
adddf70
adddf70
 new mydt("Funktionsansvarig rÄdgivning och juridik", "UTC");
adddf70
 --EXPECTF--
adddf70
-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
adddf70
-Stack trace:
adddf70
-#0 %sbug67118.php(%d): DateTime->__construct('Funktionsansvar...', Object(DateTimeZone))
adddf70
-#1 %sbug67118.php(%d): mydt->__construct('Funktionsansvar...', 'UTC')
adddf70
-#2 {main}
adddf70
-  thrown in %sbug67118.php on line %d
adddf70
+Warning: DateTime::format(): The DateTime object has not been correctly initialized by its constructor in %sbug67118.php on line %d
adddf70
+Bad date
adddf70
--
adddf70
1.9.2
adddf70
adddf70
From 15d8c80ead75be976c18a66b0933cf52f3e6579f Mon Sep 17 00:00:00 2001
adddf70
From: Remi Collet <remi@php.net>
adddf70
Date: Thu, 5 Jun 2014 14:00:00 +0200
adddf70
Subject: [PATCH] add test for previous fix
adddf70
adddf70
---
adddf70
 ext/date/tests/bug67118_2.phpt | 35 +++++++++++++++++++++++++++++++++++
adddf70
 1 file changed, 35 insertions(+)
adddf70
 create mode 100644 ext/date/tests/bug67118_2.phpt
adddf70
adddf70
diff --git a/ext/date/tests/bug67118_2.phpt b/ext/date/tests/bug67118_2.phpt
adddf70
new file mode 100644
adddf70
index 0000000..b517a3b
adddf70
--- /dev/null
adddf70
+++ b/ext/date/tests/bug67118_2.phpt
adddf70
@@ -0,0 +1,35 @@
adddf70
+--TEST--
adddf70
+Regression introduce in fix for Bug #67118
adddf70
+--INI--
adddf70
+date.timezone=Europe/Paris
adddf70
+--FILE--
adddf70
+
adddf70
+class Foo extends DateTime {
adddf70
+    public function __construct($time = null) {
adddf70
+        $tz = new DateTimeZone('UTC');
adddf70
+        try {
adddf70
+            echo "First try\n";
adddf70
+            parent::__construct($time, $tz);
adddf70
+            return;
adddf70
+        } catch (Exception $e) {
adddf70
+            echo "Second try\n";
adddf70
+            parent::__construct($time.'C', $tz);
adddf70
+        }
adddf70
+    }
adddf70
+}
adddf70
+$date = '12 Sep 2007 15:49:12 UT';
adddf70
+var_dump(new Foo($date));
adddf70
+?>
adddf70
+Done
adddf70
+--EXPECTF--
adddf70
+First try
adddf70
+Second try
adddf70
+object(Foo)#1 (3) {
adddf70
+  ["date"]=>
adddf70
+  string(26) "2007-09-12 15:49:12.000000"
adddf70
+  ["timezone_type"]=>
adddf70
+  int(3)
adddf70
+  ["timezone"]=>
adddf70
+  string(3) "UTC"
adddf70
+}
adddf70
+Done
adddf70
\ No newline at end of file
adddf70
-- 
adddf70
1.9.2
adddf70
adddf70
From 127651e9aeb4294c6be8c450fc1e7344570045f3 Mon Sep 17 00:00:00 2001
adddf70
From: Remi Collet <remi@php.net>
adddf70
Date: Thu, 5 Jun 2014 17:33:40 +0200
adddf70
Subject: [PATCH] fix test for 5.4/5.5
adddf70
adddf70
---
adddf70
 ext/date/tests/bug67118_2.phpt | 4 ++--
adddf70
 1 file changed, 2 insertions(+), 2 deletions(-)
adddf70
adddf70
diff --git a/ext/date/tests/bug67118_2.phpt b/ext/date/tests/bug67118_2.phpt
adddf70
index b517a3b..b4904a1 100644
adddf70
--- a/ext/date/tests/bug67118_2.phpt
adddf70
+++ b/ext/date/tests/bug67118_2.phpt
adddf70
@@ -26,10 +26,10 @@ First try
adddf70
 Second try
adddf70
 object(Foo)#1 (3) {
adddf70
   ["date"]=>
adddf70
-  string(26) "2007-09-12 15:49:12.000000"
adddf70
+  string(%d) "2007-09-12 15:49:%s"
adddf70
   ["timezone_type"]=>
adddf70
   int(3)
adddf70
   ["timezone"]=>
adddf70
   string(3) "UTC"
adddf70
 }
adddf70
-Done
adddf70
\ No newline at end of file
adddf70
+Done
adddf70
-- 
adddf70
1.9.2
adddf70