com php-src: Merge branch 'PHP-7.0' into PHP-7.1: Zend/zend_e xceptions.c

From: Date: Wed, 12 Oct 2016 18:09:24 +0000
Subject: com php-src: Merge branch 'PHP-7.0' into PHP-7.1: Zend/zend_e xceptions.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-94960@lists.php.net to get a copy of this message
Commit: af1bf873fe4fc70be17fa9f270e8f30666f2d2db Author: Anatol Belski <ab@php.net> Wed, 12 Oct 2016 20:09:24 +0200 Parents: fa9370db03944b31a9c3b20d586a290fe51ceaa0 74b5662536ccdf9b7b02c495f02a27c64e27fff7 Branches: PHP-7.1 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=af1bf873fe4fc70be17fa9f270e8f30666f2d2db Log: Merge branch 'PHP-7.0' into PHP-7.1 * PHP-7.0: Fix bug #73190: memcpy negative parameter _bc_new_num_ex Bugs: https://bugs.php.net/73190 Changed paths: MM Zend/zend_exceptions.c Diff: diff --cc Zend/zend_exceptions.c index dc073de,89c94eb..4f156c0 --- a/Zend/zend_exceptions.c +++ b/Zend/zend_exceptions.c @@@ -303,26 -290,28 +303,29 @@@ ZEND_METHOD(exception, __construct /* {{{ proto Exception::__wakeup() Exception unserialize checks */ -#define CHECK_EXC_TYPE(name, type) \ - pvalue = zend_read_property(i_get_exception_base(object), (object), name, sizeof(name) - 1, 1, &value); \ +#define CHECK_EXC_TYPE(id, type) \ + pvalue = zend_read_property_ex(i_get_exception_base(object), (object), CG(known_strings)[id], 1, &value); \ if (Z_TYPE_P(pvalue) != IS_NULL && Z_TYPE_P(pvalue) != type) { \ - zval tmp; \ - ZVAL_STR_COPY(&tmp, CG(known_strings)[id]); \ - Z_OBJ_HANDLER_P(object, unset_property)(object, &tmp, NULL); \ - zval_ptr_dtor(&tmp); \ - zend_unset_property(i_get_exception_base(object), object, name, sizeof(name)-1); \ ++ zend_unset_property(i_get_exception_base(object), object, ZEND_STR_PREVIOUS, sizeof(ZEND_STR_PREVIOUS)-1); \ } ZEND_METHOD(exception, __wakeup) { zval value, *pvalue; zval *object = getThis(); - CHECK_EXC_TYPE("message", IS_STRING); - CHECK_EXC_TYPE("string", IS_STRING); - CHECK_EXC_TYPE("code", IS_LONG); - CHECK_EXC_TYPE("file", IS_STRING); - CHECK_EXC_TYPE("line", IS_LONG); - CHECK_EXC_TYPE("trace", IS_ARRAY); - pvalue = zend_read_property(i_get_exception_base(object), object, "previous", sizeof("previous")-1, 1, &value); + CHECK_EXC_TYPE(ZEND_STR_MESSAGE, IS_STRING); + CHECK_EXC_TYPE(ZEND_STR_STRING, IS_STRING); + CHECK_EXC_TYPE(ZEND_STR_CODE, IS_LONG); + CHECK_EXC_TYPE(ZEND_STR_FILE, IS_STRING); + CHECK_EXC_TYPE(ZEND_STR_LINE, IS_LONG); + CHECK_EXC_TYPE(ZEND_STR_TRACE, IS_ARRAY); + CHECK_EXC_TYPE(ZEND_STR_PREVIOUS, IS_OBJECT); ++ pvalue = zend_read_property(i_get_exception_base(object), object, ZEND_STR_PREVIOUS, sizeof(ZEND_STR_PREVIOUS)-1, 1, &value); + if (pvalue && Z_TYPE_P(pvalue) != IS_NULL && (Z_TYPE_P(pvalue) != IS_OBJECT || + !instanceof_function(Z_OBJCE_P(pvalue), i_get_exception_base(object)) || + pvalue == object)) { - zend_unset_property(i_get_exception_base(object), object, "previous", sizeof("previous")-1); ++ zend_unset_property(i_get_exception_base(object), object, ZEND_STR_PREVIOUS, sizeof(ZEND_STR_PREVIOUS)-1); + } } /* }}} */ @@@ -735,10 -773,24 +738,24 @@@ ZEND_METHOD(exception, __toString zend_string_release(file); zval_ptr_dtor(&trace); + Z_OBJPROP_P(exception)->u..v.nApplyCount++; - exception = GET_PROPERTY(exception, "previous"); + exception = GET_PROPERTY(exception, ZEND_STR_PREVIOUS); + if (exception && Z_TYPE_P(exception) == IS_OBJECT && Z_OBJPROP_P(exception)->u.v.nApplyCount > 0) { + exception = NULL; + } } - zval_dtor(&fname); + zend_string_release(fname); + /* Reset apply counts */ + while (exception && Z_TYPE_P(exception) == IS_OBJECT && (base_ce = i_get_exception_base(exception)) && instanceof_function(Z_OBJCE_P(exception), base_ce)) { + if(Z_OBJPROP_P(exception)->u.v.nApplyCount) { + Z_OBJPROP_P(exception)->u.v.nApplyCount--; + } else { + break; + } - exception = GET_PROPERTY(exception, "previous"); ++ exception = GET_PROPERTY(exception, ZEND_STR_PREVIOUS); + } + exception = getThis(); base_ce = i_get_exception_base(exception);

« previous php.cvs (#94960) next »