diff options
| author | Dmitry Stogov <dmitry@php.net> | 2008-08-26 08:38:26 +0000 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@php.net> | 2008-08-26 08:38:26 +0000 |
| commit | 03f4121452bd9359ff01ec228b7a1dd89746eb35 (patch) | |
| tree | eaada22bbaf84cf2b8f99aaa6cee7e49367b5bad | |
| parent | 895ba9afc74e9438bfcd2b1748145828d90b4b14 (diff) | |
| download | php-git-03f4121452bd9359ff01ec228b7a1dd89746eb35.tar.gz | |
Fixed bug #45910 (Cannot declare self-referencing constant)
| -rw-r--r-- | Zend/zend_execute_API.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 82c6619f0f..96aa0bad23 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -541,6 +541,7 @@ ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *sco char *str_index; uint str_index_len; ulong num_index; + int ret; SEPARATE_ZVAL_IF_NOT_REF(pp); p = *pp; @@ -601,20 +602,25 @@ ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *sco switch (Z_TYPE(const_value)) { case IS_STRING: - zend_symtable_update_current_key(Z_ARRVAL_P(p), Z_STRVAL(const_value), Z_STRLEN(const_value) + 1, HASH_UPDATE_KEY_IF_BEFORE); + ret = zend_symtable_update_current_key(Z_ARRVAL_P(p), Z_STRVAL(const_value), Z_STRLEN(const_value) + 1, HASH_UPDATE_KEY_IF_BEFORE); break; case IS_BOOL: case IS_LONG: - zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_LONG, NULL, 0, Z_LVAL(const_value), HASH_UPDATE_KEY_IF_BEFORE, NULL); + ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_LONG, NULL, 0, Z_LVAL(const_value), HASH_UPDATE_KEY_IF_BEFORE, NULL); break; case IS_DOUBLE: - zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_LONG, NULL, 0, (long)Z_DVAL(const_value), HASH_UPDATE_KEY_IF_BEFORE, NULL); + ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_LONG, NULL, 0, (long)Z_DVAL(const_value), HASH_UPDATE_KEY_IF_BEFORE, NULL); break; case IS_NULL: - zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_STRING, "", 1, 0, HASH_UPDATE_KEY_IF_BEFORE, NULL); + ret = zend_hash_update_current_key_ex(Z_ARRVAL_P(p), HASH_KEY_IS_STRING, "", 1, 0, HASH_UPDATE_KEY_IF_BEFORE, NULL); break; + default: + ret = SUCCESS; + break; + } + if (ret == SUCCESS) { + zend_hash_move_forward(Z_ARRVAL_P(p)); } - zend_hash_move_forward(Z_ARRVAL_P(p)); zval_dtor(&const_value); } zend_hash_apply_with_argument(Z_ARRVAL_P(p), (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC); |
