diff options
author | Nikita Popov <nikic@php.net> | 2014-10-09 13:58:14 +0200 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2014-10-09 13:58:14 +0200 |
commit | ee5b30fa197046973e813a80dd0b7c67827c0ae1 (patch) | |
tree | 71e0c4f24afee1eac312b7dae97448cc871c0421 /Zend/zend_execute.h | |
parent | 43f1c94ddace679cac008b674ef983199a951542 (diff) | |
download | php-git-ee5b30fa197046973e813a80dd0b7c67827c0ae1.tar.gz |
Remove support for classes without class entries
get_class_entry must be non-NULL and return non-NULL.
Diffstat (limited to 'Zend/zend_execute.h')
-rw-r--r-- | Zend/zend_execute.h | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index 5178ab6c4b..a77446adb0 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -98,24 +98,22 @@ again: result = (zend_hash_num_elements(Z_ARRVAL_P(op))?1:0); break; case IS_OBJECT: - if (IS_ZEND_STD_OBJECT(*op)) { - if (Z_OBJ_HT_P(op)->cast_object) { - zval tmp; - if (Z_OBJ_HT_P(op)->cast_object(op, &tmp, _IS_BOOL TSRMLS_CC) == SUCCESS) { - result = Z_TYPE(tmp) == IS_TRUE; - break; - } - zend_error(E_RECOVERABLE_ERROR, "Object of class %s could not be converted to boolean", Z_OBJ_P(op)->ce->name->val); - } else if (Z_OBJ_HT_P(op)->get) { - zval rv; - zval *tmp = Z_OBJ_HT_P(op)->get(op, &rv TSRMLS_CC); - if (Z_TYPE_P(tmp) != IS_OBJECT) { - /* for safety - avoid loop */ - convert_to_boolean(tmp); - result = Z_TYPE_P(tmp) == IS_TRUE; - zval_ptr_dtor(tmp); - break; - } + if (Z_OBJ_HT_P(op)->cast_object) { + zval tmp; + if (Z_OBJ_HT_P(op)->cast_object(op, &tmp, _IS_BOOL TSRMLS_CC) == SUCCESS) { + result = Z_TYPE(tmp) == IS_TRUE; + break; + } + zend_error(E_RECOVERABLE_ERROR, "Object of class %s could not be converted to boolean", Z_OBJ_P(op)->ce->name->val); + } else if (Z_OBJ_HT_P(op)->get) { + zval rv; + zval *tmp = Z_OBJ_HT_P(op)->get(op, &rv TSRMLS_CC); + if (Z_TYPE_P(tmp) != IS_OBJECT) { + /* for safety - avoid loop */ + convert_to_boolean(tmp); + result = Z_TYPE_P(tmp) == IS_TRUE; + zval_ptr_dtor(tmp); + break; } } result = 1; @@ -289,7 +287,7 @@ void zend_shutdown_timeout_thread(void); /* The following tries to resolve the classname of a zval of type object. * Since it is slow it should be only used in error messages. */ -#define Z_OBJ_CLASS_NAME_P(obj) (((obj) && (obj)->handlers->get_class_entry != NULL && (obj)->handlers->get_class_entry) ? (obj)->handlers->get_class_entry(obj TSRMLS_CC)->name->val : "") +#define Z_OBJ_CLASS_NAME_P(obj) ((obj) ? (obj)->handlers->get_class_entry(obj TSRMLS_CC)->name->val : "") ZEND_API zval* zend_get_compiled_variable_value(const zend_execute_data *execute_data_ptr, uint32_t var); |