mirror of
https://github.com/php/php-src.git
synced 2025-08-17 22:48:57 +02:00
Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3: Backported fix for bug #62852
This commit is contained in:
commit
cfd096fd7c
4 changed files with 66 additions and 31 deletions
|
@ -2532,13 +2532,15 @@ static int php_date_initialize_from_hash(zval **return_value, php_date_obj **dat
|
|||
case TIMELIB_ZONETYPE_OFFSET:
|
||||
case TIMELIB_ZONETYPE_ABBR: {
|
||||
char *tmp = emalloc(Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 2);
|
||||
int ret;
|
||||
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));
|
||||
php_date_initialize(*dateobj, tmp, Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC);
|
||||
ret = php_date_initialize(*dateobj, tmp, Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC);
|
||||
efree(tmp);
|
||||
return 1;
|
||||
return 1 == ret;
|
||||
}
|
||||
|
||||
case TIMELIB_ZONETYPE_ID:
|
||||
case TIMELIB_ZONETYPE_ID: {
|
||||
int ret;
|
||||
convert_to_string(*z_timezone);
|
||||
|
||||
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
|
|||
tzobj->tzi.tz = tzi;
|
||||
tzobj->initialized = 1;
|
||||
|
||||
php_date_initialize(*dateobj, Z_STRVAL_PP(z_date), Z_STRLEN_PP(z_date), NULL, tmp_obj, 0 TSRMLS_CC);
|
||||
ret = php_date_initialize(*dateobj, Z_STRVAL_PP(z_date), Z_STRLEN_PP(z_date), NULL, tmp_obj, 0 TSRMLS_CC);
|
||||
zval_ptr_dtor(&tmp_obj);
|
||||
return 1;
|
||||
return 1 == ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2575,7 +2578,9 @@ PHP_METHOD(DateTime, __set_state)
|
|||
|
||||
php_date_instantiate(date_ce_date, return_value TSRMLS_CC);
|
||||
dateobj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC);
|
||||
if (!php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC)) {
|
||||
php_error(E_ERROR, "Invalid serialization data for DateTime object");
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -2591,7 +2596,9 @@ PHP_METHOD(DateTime, __wakeup)
|
|||
|
||||
myht = Z_OBJPROP_P(object);
|
||||
|
||||
php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC);
|
||||
if (!php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC)) {
|
||||
php_error(E_ERROR, "Invalid serialization data for DateTime object");
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
|
|
@ -1,36 +1,14 @@
|
|||
--TEST--
|
||||
Bug #62852 (Unserialize invalid DateTime causes crash)
|
||||
Bug #62852 (Unserialize invalid DateTime causes crash), variation 1
|
||||
--INI--
|
||||
date.timezone=GMT
|
||||
--XFAIL--
|
||||
bug is not fixed yet
|
||||
--FILE--
|
||||
<?php
|
||||
$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";}';
|
||||
$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";}';
|
||||
|
||||
global $foo;
|
||||
|
||||
class Foo extends DateTime {
|
||||
function __wakeup() {
|
||||
global $foo;
|
||||
$foo = $this;
|
||||
parent::__wakeup();
|
||||
}
|
||||
}
|
||||
|
||||
// Old test case
|
||||
try {
|
||||
unserialize( $s1 );
|
||||
} catch ( Exception $e ) {}
|
||||
|
||||
// My test case
|
||||
try {
|
||||
unserialize( $s2 );
|
||||
} catch ( Exception $e ) {}
|
||||
var_dump( $foo );
|
||||
|
||||
echo "okey";
|
||||
?>
|
||||
--EXPECTF--
|
||||
okey
|
||||
Fatal error: Invalid serialization data for DateTime object in %sbug62852.php on line %d
|
||||
|
|
25
ext/date/tests/bug62852_var2.phpt
Normal file
25
ext/date/tests/bug62852_var2.phpt
Normal file
|
@ -0,0 +1,25 @@
|
|||
--TEST--
|
||||
Bug #62852 (Unserialize invalid DateTime causes crash), variation 2
|
||||
--INI--
|
||||
date.timezone=GMT
|
||||
--FILE--
|
||||
<?php
|
||||
$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";}';
|
||||
|
||||
global $foo;
|
||||
|
||||
class Foo extends DateTime {
|
||||
function __wakeup() {
|
||||
global $foo;
|
||||
$foo = $this;
|
||||
parent::__wakeup();
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
unserialize( $s2 );
|
||||
} catch ( Exception $e ) {}
|
||||
var_dump( $foo );
|
||||
|
||||
--EXPECTF--
|
||||
Fatal error: Invalid serialization data for DateTime object in %sbug62852_var2.php on line %d
|
25
ext/date/tests/bug62852_var3.phpt
Normal file
25
ext/date/tests/bug62852_var3.phpt
Normal file
|
@ -0,0 +1,25 @@
|
|||
--TEST--
|
||||
Bug #62852 (Unserialize invalid DateTime causes crash), variation 3
|
||||
--INI--
|
||||
date.timezone=GMT
|
||||
--FILE--
|
||||
<?php
|
||||
$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";}';
|
||||
|
||||
global $foo;
|
||||
|
||||
class Foo extends DateTime {
|
||||
function __wakeup() {
|
||||
global $foo;
|
||||
$foo = $this;
|
||||
parent::__wakeup();
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
unserialize( $s2 );
|
||||
} catch ( Exception $e ) {}
|
||||
var_dump( $foo );
|
||||
|
||||
--EXPECTF--
|
||||
Fatal error: Invalid serialization data for DateTime object in %sbug62852_var3.php on line %d
|
Loading…
Add table
Add a link
Reference in a new issue