Skip to content

Commit

Permalink
MFH: improved the error reporting portion of array_walk()
Browse files Browse the repository at this point in the history
  • Loading branch information
Moriyoshi Koizumi committed Nov 26, 2002
1 parent 8f73c27 commit b71f733
Showing 1 changed file with 8 additions and 30 deletions.
38 changes: 8 additions & 30 deletions ext/standard/array.c
Expand Up @@ -980,38 +980,16 @@ static int php_array_walk(HashTable *target_hash, zval **userdata TSRMLS_DC)

zval_ptr_dtor(&retval_ptr);
} else {
if (Z_TYPE_PP(BG(array_walk_func_name)) == IS_STRING) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist",
(*BG(array_walk_func_name))->value.str.val);
} else if (Z_TYPE_PP(BG(array_walk_func_name)) == IS_ARRAY) {
char *obj_name = NULL;
zval **obj;
zval **mt_name;

if (zend_hash_index_find(Z_ARRVAL_PP(BG(array_walk_func_name)),
0, (void **)&obj) == SUCCESS
&& zend_hash_index_find(Z_ARRVAL_PP(BG(array_walk_func_name)),
1, (void **)&mt_name) == SUCCESS
&& Z_TYPE_PP(mt_name) == IS_STRING) {
switch (Z_TYPE_PP(obj)) {
case IS_OBJECT:
obj_name = Z_OBJ_PP(obj)->ce->name;
break;

case IS_STRING:
obj_name = Z_STRVAL_PP(obj);
break;
}
}
char *func_name;

if (obj_name != NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s::%s() - function does not exist",
obj_name, Z_STRVAL_PP(mt_name));
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid function name");
}
break;
if (zend_is_callable(*BG(array_walk_func_name), 0, &func_name)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s()", func_name);
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist", func_name);
}

efree(func_name);
break;
}

zend_hash_move_forward_ex(target_hash, &pos);
Expand Down

0 comments on commit b71f733

Please sign in to comment.