From: Dmitry Stogov Date: Tue, 4 Mar 2014 10:17:17 +0000 (+0400) Subject: Passing symbol_table into user error handlers X-Git-Tag: POST_PHPNG_MERGE~412^2~433 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e0f6bae56b8a4d2995e9f3cf0674031a7f5b6939;p=php Passing symbol_table into user error handlers --- diff --git a/Zend/zend.c b/Zend/zend.c index dd03ea6caa..75abcf3b64 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -1181,13 +1181,8 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ if (!EG(active_symbol_table)) { ZVAL_NULL(¶ms[4]); } else { -//??? -#if 1 - ZVAL_NULL(¶ms[4]); -#else - ZVAL_ARR(¶ms[4], EG(active_symbol_table)); - zval_copy_ctor(¶ms[4]); -#endif + array_init_size(¶ms[4], zend_hash_num_elements(EG(active_symbol_table))); + zend_hash_copy(Z_ARRVAL(params[4]), EG(active_symbol_table), zval_add_ref); } ZVAL_COPY_VALUE(&orig_user_error_handler, &EG(user_error_handler)); diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 1b6b6e0678..0f424cb8eb 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -99,6 +99,7 @@ ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, dtor_func_t pDestructor, { uint i = 3; + ht->flags = 0; SET_INCONSISTENT(HT_OK); if (nSize >= 0x80000000) { @@ -119,7 +120,7 @@ ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, dtor_func_t pDestructor, ht->nNumOfElements = 0; ht->nNextFreeElement = 0; ht->nInternalPointer = INVALID_IDX; - ht->flags = HASH_FLAG_APPLY_PROTECTION; + ht->flags |= HASH_FLAG_APPLY_PROTECTION; if (persistent) { ht->flags |= HASH_FLAG_PERSISTENT; }