}
return NULL;
}
+/* }}} */
+
+static ZEND_COLD zend_never_inline void zend_bad_property_access(zend_property_info *property_info, zend_class_entry *ce, zend_string *member) /* {{{ */
+{
+ zend_throw_error(NULL, "Cannot access %s property %s::$%s", zend_visibility_string(property_info->flags), ZSTR_VAL(ce->name), ZSTR_VAL(member));
+}
+/* }}} */
+
+static ZEND_COLD zend_never_inline void zend_bad_property_name(void) /* {{{ */
+{
+ zend_throw_error(NULL, "Cannot access property started with '\\0'");
+}
+/* }}} */
static zend_always_inline uintptr_t zend_get_property_offset(zend_class_entry *ce, zend_string *member, int silent, void **cache_slot) /* {{{ */
{
if (UNEXPECTED(zend_hash_num_elements(&ce->properties_info) == 0)
|| UNEXPECTED((zv = zend_hash_find(&ce->properties_info, member)) == NULL)) {
- if (UNEXPECTED(ZSTR_VAL(member)[0] == '\0' && ZSTR_LEN(member) != 0)) {
+ if (UNEXPECTED(ZSTR_VAL(member)[0] == '\0') && ZSTR_LEN(member) != 0) {
if (!silent) {
- zend_throw_error(NULL, "Cannot access property started with '\\0'");
+ zend_bad_property_name();
}
return ZEND_WRONG_PROPERTY_OFFSET;
}
wrong:
/* Information was available, but we were denied access. Error out. */
if (!silent) {
- zend_throw_error(NULL, "Cannot access %s property %s::$%s", zend_visibility_string(flags), ZSTR_VAL(ce->name), ZSTR_VAL(member));
+ zend_bad_property_access(property_info, ce, member);
}
return ZEND_WRONG_PROPERTY_OFFSET;
}
if (UNEXPECTED(zend_hash_num_elements(&ce->properties_info) == 0)
|| EXPECTED((zv = zend_hash_find(&ce->properties_info, member)) == NULL)) {
- if (UNEXPECTED(ZSTR_VAL(member)[0] == '\0' && ZSTR_LEN(member) != 0)) {
+ if (UNEXPECTED(ZSTR_VAL(member)[0] == '\0') && ZSTR_LEN(member) != 0) {
if (!silent) {
- zend_throw_error(NULL, "Cannot access property started with '\\0'");
+ zend_bad_property_name();
}
return ZEND_WRONG_PROPERTY_INFO;
}
wrong:
/* Information was available, but we were denied access. Error out. */
if (!silent) {
- zend_throw_error(NULL, "Cannot access %s property %s::$%s", zend_visibility_string(flags), ZSTR_VAL(ce->name), ZSTR_VAL(member));
+ zend_bad_property_access(property_info, ce, member);
}
return ZEND_WRONG_PROPERTY_INFO;
}
}
OBJ_RELEASE(zobj);
goto exit;
- } else if (ZSTR_VAL(name)[0] == '\0' && ZSTR_LEN(name) != 0) {
- zend_throw_error(NULL, "Cannot access property started with '\\0'");
+ } else if (UNEXPECTED(ZSTR_VAL(name)[0] == '\0') && ZSTR_LEN(name) != 0) {
+ zend_bad_property_name();
retval = &EG(uninitialized_zval);
goto exit;
}
} else if (EXPECTED(!IS_WRONG_PROPERTY_OFFSET(property_offset))) {
goto write_std_property;
} else {
- if (ZSTR_VAL(name)[0] == '\0' && ZSTR_LEN(name) != 0) {
- zend_throw_error(NULL, "Cannot access property started with '\\0'");
+ if (UNEXPECTED(ZSTR_VAL(name)[0] == '\0') && ZSTR_LEN(name) != 0) {
+ zend_bad_property_name();
goto exit;
}
}
}
/* }}} */
+static ZEND_COLD zend_never_inline void zend_bad_array_access(zend_class_entry *ce) /* {{{ */
+{
+ zend_throw_error(NULL, "Cannot use object of type %s as array", ZSTR_VAL(ce->name));
+}
+/* }}} */
+
ZEND_API zval *zend_std_read_dimension(zval *object, zval *offset, int type, zval *rv) /* {{{ */
{
zend_class_entry *ce = Z_OBJCE_P(object);
}
return rv;
} else {
- zend_throw_error(NULL, "Cannot use object of type %s as array", ZSTR_VAL(ce->name));
+ zend_bad_array_access(ce);
return NULL;
}
}
zval_ptr_dtor(&tmp_object);
zval_ptr_dtor(&tmp_offset);
} else {
- zend_throw_error(NULL, "Cannot use object of type %s as array", ZSTR_VAL(ce->name));
+ zend_bad_array_access(ce);
}
}
/* }}} */
zval_ptr_dtor(&tmp_object);
zval_ptr_dtor(&tmp_offset);
} else {
- zend_throw_error(NULL, "Cannot use object of type %s as array", ZSTR_VAL(ce->name));
+ zend_bad_array_access(ce);
return 0;
}
return result;
zend_std_call_unsetter(zobj, name);
(*guard) &= ~IN_UNSET;
} else {
- if (ZSTR_VAL(name)[0] == '\0' && ZSTR_LEN(name) != 0) {
- zend_throw_error(NULL, "Cannot access property started with '\\0'");
+ if (UNEXPECTED(ZSTR_VAL(name)[0] == '\0') && ZSTR_LEN(name) != 0) {
+ zend_bad_property_name();
goto exit;
}
}
zval_ptr_dtor(&tmp_object);
zval_ptr_dtor(&tmp_offset);
} else {
- zend_throw_error(NULL, "Cannot use object of type %s as array", ZSTR_VAL(ce->name));
+ zend_bad_array_access(ce);
}
}
/* }}} */
}
/* }}} */
+static ZEND_COLD zend_never_inline void zend_bad_method_call(zend_function *fbc, zend_string *method_name, zend_class_entry *scope) /* {{{ */
+{
+ zend_throw_error(NULL, "Call to %s method %s::%s() from context '%s'", zend_visibility_string(fbc->common.fn_flags), ZEND_FN_SCOPE_NAME(fbc), ZSTR_VAL(method_name), scope ? ZSTR_VAL(scope->name) : "");
+}
+/* }}} */
+
ZEND_API zend_function *zend_std_get_method(zend_object **obj_ptr, zend_string *method_name, const zval *key) /* {{{ */
{
zend_object *zobj = *obj_ptr;
if (zobj->ce->__call) {
fbc = zend_get_user_call_function(zobj->ce, method_name);
} else {
- zend_throw_error(NULL, "Call to %s method %s::%s() from context '%s'", zend_visibility_string(fbc->common.fn_flags), ZEND_FN_SCOPE_NAME(fbc), ZSTR_VAL(method_name), scope ? ZSTR_VAL(scope->name) : "");
+ zend_bad_method_call(fbc, method_name, scope);
fbc = NULL;
}
}
if (ce->__callstatic) {
fbc = zend_get_user_callstatic_function(ce, function_name);
} else {
- zend_throw_error(NULL, "Call to %s method %s::%s() from context '%s'", zend_visibility_string(fbc->common.fn_flags), ZEND_FN_SCOPE_NAME(fbc), ZSTR_VAL(function_name), scope ? ZSTR_VAL(scope->name) : "");
+ zend_bad_method_call(fbc, function_name, scope);
fbc = NULL;
}
}
if (UNEXPECTED(property_info->flags & ZEND_ACC_PRIVATE)
|| UNEXPECTED(!is_protected_compatible_scope(property_info->ce, scope))) {
if (!silent) {
- zend_throw_error(NULL, "Cannot access %s property %s::$%s", zend_visibility_string(property_info->flags), ZSTR_VAL(ce->name), ZSTR_VAL(property_name));
+ zend_bad_property_access(property_info, ce, property_name);
}
return NULL;
}
}
/* }}} */
-static ZEND_COLD zend_never_inline void zend_incompatible_constructor(zend_function *constructor, zend_class_entry *scope) /* {{{ */
+static ZEND_COLD zend_never_inline void zend_bad_constructor_call(zend_function *constructor, zend_class_entry *scope) /* {{{ */
{
if (scope) {
zend_throw_error(NULL, "Call to %s %s::%s() from context '%s'", zend_visibility_string(constructor->common.fn_flags), ZSTR_VAL(constructor->common.scope->name), ZSTR_VAL(constructor->common.function_name), ZSTR_VAL(scope->name));
if (UNEXPECTED(constructor->common.scope != scope)) {
if (UNEXPECTED(constructor->op_array.fn_flags & ZEND_ACC_PRIVATE)
|| UNEXPECTED(!zend_check_protected(zend_get_function_root_class(constructor), scope))) {
- zend_incompatible_constructor(constructor, scope);
+ zend_bad_constructor_call(constructor, scope);
constructor = NULL;
}
}