com php-src: Merge branch 'PHP-7.0' into PHP-7.1: ext/standard/var.c

From: Date: Sat, 05 Nov 2016 22:10:19 +0000
Subject: com php-src: Merge branch 'PHP-7.0' into PHP-7.1: ext/standard/var.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-95410@lists.php.net to get a copy of this message
Commit: c0762bd8c8e6602a1c2a9e3d795bd5d779fb7abc Author: Nikita Popov <nikic@php.net> Sat, 5 Nov 2016 23:10:19 +0100 Parents: faae3122d24ef8f241168ca5b9535355583ae3a0 b2af4e8868726a040234de113436c6e4f6372d17 Branches: PHP-7.1 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=c0762bd8c8e6602a1c2a9e3d795bd5d779fb7abc Log: Merge branch 'PHP-7.0' into PHP-7.1 Changed paths: MM ext/standard/var.c Diff: diff --cc ext/standard/var.c index 8722f3d,88719cc...7e84c91 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@@ -1065,7 -1036,8 +1065,8 @@@ PHP_FUNCTION(unserialize const unsigned char *p; php_unserialize_data_t var_hash; zval *options = NULL, *classes = NULL; + zval *retval; - HashTable *class_hash = NULL; + HashTable *class_hash = NULL, *prev_class_hash; if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|a", &buf, &buf_len, &options) == FAILURE) { RETURN_FALSE; @@@ -1102,27 -1066,25 +1103,21 @@@ zend_string_release(lcname); } ZEND_HASH_FOREACH_END(); } + php_var_unserialize_set_allowed_classes(var_hash, class_hash); } - if (!php_var_unserialize(return_value, &p, p + buf_len, &var_hash)) { - zval_ptr_dtor(return_value); + retval = var_tmp_var(&var_hash); - if (!php_var_unserialize_ex(retval, &p, p + buf_len, &var_hash, class_hash)) { - PHP_VAR_UNSERIALIZE_DESTROY(var_hash); - if (class_hash) { - zend_hash_destroy(class_hash); - FREE_HASHTABLE(class_hash); - } ++ if (!php_var_unserialize(retval, &p, p + buf_len, &var_hash)) { if (!EG(exception)) { php_error_docref(NULL, E_NOTICE, "Error at offset " ZEND_LONG_FMT " of %zd bytes", (zend_long)((char*)p - buf), buf_len); } - RETURN_FALSE; + RETVAL_FALSE; + } else { - /* We should keep an reference to return_value to prevent it from being dtor - in case nesting calls to unserialize */ - var_push_dtor(&var_hash, return_value); - - /* Ensure return value is a value */ - if (Z_ISREF_P(return_value)) { - zend_unwrap_reference(return_value); - } ++ ZVAL_DEREF(retval); ++ ZVAL_COPY(return_value, retval); } - ZVAL_COPY(return_value, retval); - - PHP_VAR_UNSERIALIZE_DESTROY(var_hash); if (class_hash) { zend_hash_destroy(class_hash); FREE_HASHTABLE(class_hash);

« previous php.cvs (#95410) next »