Skip to content

Commit cfd096f

Browse files
committed
Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3: Backported fix for bug #62852
2 parents c6f6bf8 + 8d199c7 commit cfd096f

File tree

4 files changed

+66
-31
lines changed

4 files changed

+66
-31
lines changed

ext/date/php_date.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2532,13 +2532,15 @@ static int php_date_initialize_from_hash(zval **return_value, php_date_obj **dat
25322532
case TIMELIB_ZONETYPE_OFFSET:
25332533
case TIMELIB_ZONETYPE_ABBR: {
25342534
char *tmp = emalloc(Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 2);
2535+
int ret;
25352536
snprintf(tmp, Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 2, "%s %s", Z_STRVAL_PP(z_date), Z_STRVAL_PP(z_timezone));
2536-
php_date_initialize(*dateobj, tmp, Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC);
2537+
ret = php_date_initialize(*dateobj, tmp, Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC);
25372538
efree(tmp);
2538-
return 1;
2539+
return 1 == ret;
25392540
}
25402541

2541-
case TIMELIB_ZONETYPE_ID:
2542+
case TIMELIB_ZONETYPE_ID: {
2543+
int ret;
25422544
convert_to_string(*z_timezone);
25432545

25442546
tzi = php_date_parse_tzfile(Z_STRVAL_PP(z_timezone), DATE_TIMEZONEDB TSRMLS_CC);
@@ -2549,9 +2551,10 @@ static int php_date_initialize_from_hash(zval **return_value, php_date_obj **dat
25492551
tzobj->tzi.tz = tzi;
25502552
tzobj->initialized = 1;
25512553

2552-
php_date_initialize(*dateobj, Z_STRVAL_PP(z_date), Z_STRLEN_PP(z_date), NULL, tmp_obj, 0 TSRMLS_CC);
2554+
ret = php_date_initialize(*dateobj, Z_STRVAL_PP(z_date), Z_STRLEN_PP(z_date), NULL, tmp_obj, 0 TSRMLS_CC);
25532555
zval_ptr_dtor(&tmp_obj);
2554-
return 1;
2556+
return 1 == ret;
2557+
}
25552558
}
25562559
}
25572560
}
@@ -2575,7 +2578,9 @@ PHP_METHOD(DateTime, __set_state)
25752578

25762579
php_date_instantiate(date_ce_date, return_value TSRMLS_CC);
25772580
dateobj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC);
2578-
php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC);
2581+
if (!php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC)) {
2582+
php_error(E_ERROR, "Invalid serialization data for DateTime object");
2583+
}
25792584
}
25802585
/* }}} */
25812586

@@ -2591,7 +2596,9 @@ PHP_METHOD(DateTime, __wakeup)
25912596

25922597
myht = Z_OBJPROP_P(object);
25932598

2594-
php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC);
2599+
if (!php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC)) {
2600+
php_error(E_ERROR, "Invalid serialization data for DateTime object");
2601+
}
25952602
}
25962603
/* }}} */
25972604

ext/date/tests/bug62852.phpt

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,14 @@
11
--TEST--
2-
Bug #62852 (Unserialize invalid DateTime causes crash)
2+
Bug #62852 (Unserialize invalid DateTime causes crash), variation 1
33
--INI--
44
date.timezone=GMT
5-
--XFAIL--
6-
bug is not fixed yet
75
--FILE--
86
<?php
97
$s1 = 'O:8:"DateTime":3:{s:4:"date";s:20:"10007-06-07 03:51:49";s:13:"timezone_type";i:3;s:8:"timezone";s:3:"UTC";}';
10-
$s2 = 'O:3:"Foo":3:{s:4:"date";s:20:"10007-06-07 03:51:49";s:13:"timezone_type";i:3;s:8:"timezone";s:3:"UTC";}';
118

12-
global $foo;
13-
14-
class Foo extends DateTime {
15-
function __wakeup() {
16-
global $foo;
17-
$foo = $this;
18-
parent::__wakeup();
19-
}
20-
}
21-
22-
// Old test case
239
try {
2410
unserialize( $s1 );
2511
} catch ( Exception $e ) {}
2612

27-
// My test case
28-
try {
29-
unserialize( $s2 );
30-
} catch ( Exception $e ) {}
31-
var_dump( $foo );
32-
33-
echo "okey";
34-
?>
3513
--EXPECTF--
36-
okey
14+
Fatal error: Invalid serialization data for DateTime object in %sbug62852.php on line %d

ext/date/tests/bug62852_var2.phpt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
--TEST--
2+
Bug #62852 (Unserialize invalid DateTime causes crash), variation 2
3+
--INI--
4+
date.timezone=GMT
5+
--FILE--
6+
<?php
7+
$s2 = 'O:3:"Foo":3:{s:4:"date";s:20:"10007-06-07 03:51:49";s:13:"timezone_type";i:3;s:8:"timezone";s:3:"UTC";}';
8+
9+
global $foo;
10+
11+
class Foo extends DateTime {
12+
function __wakeup() {
13+
global $foo;
14+
$foo = $this;
15+
parent::__wakeup();
16+
}
17+
}
18+
19+
try {
20+
unserialize( $s2 );
21+
} catch ( Exception $e ) {}
22+
var_dump( $foo );
23+
24+
--EXPECTF--
25+
Fatal error: Invalid serialization data for DateTime object in %sbug62852_var2.php on line %d

ext/date/tests/bug62852_var3.phpt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
--TEST--
2+
Bug #62852 (Unserialize invalid DateTime causes crash), variation 3
3+
--INI--
4+
date.timezone=GMT
5+
--FILE--
6+
<?php
7+
$s2 = 'O:3:"Foo":3:{s:4:"date";s:19:"0000-00-00 00:00:00";s:13:"timezone_type";i:0;s:8:"timezone";s:3:"UTC";}';
8+
9+
global $foo;
10+
11+
class Foo extends DateTime {
12+
function __wakeup() {
13+
global $foo;
14+
$foo = $this;
15+
parent::__wakeup();
16+
}
17+
}
18+
19+
try {
20+
unserialize( $s2 );
21+
} catch ( Exception $e ) {}
22+
var_dump( $foo );
23+
24+
--EXPECTF--
25+
Fatal error: Invalid serialization data for DateTime object in %sbug62852_var3.php on line %d

0 commit comments

Comments
 (0)