com php-src: Fixed Bug #62500 (Segfault in DateInterval class when extended): NEWS ext/date/php_date.c ext/date/tests/bug6 2500.phpt
| From: | Xinchen Hui | Date: | Tue, 10 Jul 2012 10:43:11 +0000 |
| Subject: | com php-src: Fixed Bug #62500 (Segfault in DateInterval class when extended): NEWS ext/date/php_date.c ext/date/tests/bug6 2500.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-69553@lists.php.net to get a copy of this message | ||
Commit: bcf5853eaa8b8be793d4a1bd325eaea68cfe57bb
Author: Xinchen Hui <laruence@php.net> Tue, 10 Jul 2012 18:43:11 +0800
Parents: c819cf9d6bd43d79b894f1d0f0c6c282893fd9bd
Branches: PHP-5.3
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=bcf5853eaa8b8be793d4a1bd325eaea68cfe57bb
Log:
Fixed Bug #62500 (Segfault in DateInterval class when extended)
Bugs:
https://bugs.php.net/62500
Changed paths:
M NEWS
M ext/date/php_date.c
A ext/date/tests/bug62500.phpt
Diff:
diff --git a/NEWS b/NEWS
index c9f3fc4..902185c 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,9 @@ PHP NEWS
. Fixed bug #62499 (curl_setopt($ch, CURLOPT_COOKIEFILE, "") returns false).
(r..hampartsumyan@gmail.com, Laruence)
+- DateTime:
+ . Fixed Bug #62500 (Segfault in DateInterval class when extended). (Laruence)
+
14 Jun 2012, PHP 5.3.14
- CLI SAPI:
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 527894d..e8a4570 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -3511,6 +3511,14 @@ zval *date_interval_read_property(zval *object, zval *member, int type
TSRMLS_DC
obj = (php_interval_obj *)zend_objects_get_address(object TSRMLS_CC);
+ if (!obj->initialized) {
+ retval = (zend_get_std_object_handlers())->read_property(object, member, type TSRMLS_CC);
+ if (member == &tmp_member) {
+ zval_dtor(member);
+ }
+ return retval;
+ }
+
#define GET_VALUE_FROM_STRUCT(n,m) \
if (strcmp(Z_STRVAL_P(member), m) == 0) { \
value = obj->diff->n; \
@@ -3560,8 +3568,17 @@ void date_interval_write_property(zval *object, zval *member, zval *value
TSRMLS
convert_to_string(&tmp_member);
member = &tmp_member;
}
+
obj = (php_interval_obj *)zend_objects_get_address(object TSRMLS_CC);
+ if (!obj->initialized) {
+ (zend_get_std_object_handlers())->write_property(object, member, value TSRMLS_CC);
+ if (member == &tmp_member) {
+ zval_dtor(member);
+ }
+ return;
+ }
+
#define SET_VALUE_FROM_STRUCT(n,m) \
if (strcmp(Z_STRVAL_P(member), m) == 0) { \
if (value->type != IS_LONG) { \
diff --git a/ext/date/tests/bug62500.phpt b/ext/date/tests/bug62500.phpt
new file mode 100644
index 0000000..6952332
--- /dev/null
+++ b/ext/date/tests/bug62500.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Bug #62500 (Segfault in DateInterval class when extended)
+--INI--
+date.timezone=GMT
+--FILE--
+<?php
+class Crasher extends DateInterval {
+ public $foo;
+ public function __construct($time_spec) {
+ var_dump($this->foo);
+ $this->foo = 3;
+ var_dump($this->foo);
+ var_dump($this->{2});
+ parent::__construct($time_spec);
+ }
+}
+try {
+ $c = new Crasher('blah');
+} catch (Exception $e) {
+ var_dump($e->getMessage());
+}
+--EXPECTF--
+NULL
+int(3)
+
+Notice: Undefined property: Crasher::$2 in %sbug62500.php on line %d
+NULL
+string(%s) "DateInterval::__construct(): Unknown or bad format (blah)"