Skip to content

Commit bcf5853

Browse files
committed
Fixed Bug #62500 (Segfault in DateInterval class when extended)
1 parent c819cf9 commit bcf5853

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ PHP NEWS
1010
. Fixed bug #62499 (curl_setopt($ch, CURLOPT_COOKIEFILE, "") returns false).
1111
([email protected], Laruence)
1212

13+
- DateTime:
14+
. Fixed Bug #62500 (Segfault in DateInterval class when extended). (Laruence)
15+
1316
14 Jun 2012, PHP 5.3.14
1417

1518
- CLI SAPI:

ext/date/php_date.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3511,6 +3511,14 @@ zval *date_interval_read_property(zval *object, zval *member, int type TSRMLS_DC
35113511

35123512
obj = (php_interval_obj *)zend_objects_get_address(object TSRMLS_CC);
35133513

3514+
if (!obj->initialized) {
3515+
retval = (zend_get_std_object_handlers())->read_property(object, member, type TSRMLS_CC);
3516+
if (member == &tmp_member) {
3517+
zval_dtor(member);
3518+
}
3519+
return retval;
3520+
}
3521+
35143522
#define GET_VALUE_FROM_STRUCT(n,m) \
35153523
if (strcmp(Z_STRVAL_P(member), m) == 0) { \
35163524
value = obj->diff->n; \
@@ -3560,8 +3568,17 @@ void date_interval_write_property(zval *object, zval *member, zval *value TSRMLS
35603568
convert_to_string(&tmp_member);
35613569
member = &tmp_member;
35623570
}
3571+
35633572
obj = (php_interval_obj *)zend_objects_get_address(object TSRMLS_CC);
35643573

3574+
if (!obj->initialized) {
3575+
(zend_get_std_object_handlers())->write_property(object, member, value TSRMLS_CC);
3576+
if (member == &tmp_member) {
3577+
zval_dtor(member);
3578+
}
3579+
return;
3580+
}
3581+
35653582
#define SET_VALUE_FROM_STRUCT(n,m) \
35663583
if (strcmp(Z_STRVAL_P(member), m) == 0) { \
35673584
if (value->type != IS_LONG) { \

ext/date/tests/bug62500.phpt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
--TEST--
2+
Bug #62500 (Segfault in DateInterval class when extended)
3+
--INI--
4+
date.timezone=GMT
5+
--FILE--
6+
<?php
7+
class Crasher extends DateInterval {
8+
public $foo;
9+
public function __construct($time_spec) {
10+
var_dump($this->foo);
11+
$this->foo = 3;
12+
var_dump($this->foo);
13+
var_dump($this->{2});
14+
parent::__construct($time_spec);
15+
}
16+
}
17+
try {
18+
$c = new Crasher('blah');
19+
} catch (Exception $e) {
20+
var_dump($e->getMessage());
21+
}
22+
--EXPECTF--
23+
NULL
24+
int(3)
25+
26+
Notice: Undefined property: Crasher::$2 in %sbug62500.php on line %d
27+
NULL
28+
string(%s) "DateInterval::__construct(): Unknown or bad format (blah)"

0 commit comments

Comments
 (0)