diff options
author | ULF WENDEL <uw@php.net> | 2012-10-22 13:37:37 +0200 |
---|---|---|
committer | ULF WENDEL <uw@php.net> | 2012-10-22 13:37:37 +0200 |
commit | dfeb91acc7d44cc5035db34a31310dc3075df11f (patch) | |
tree | e6e1b6c6898fc10eb602a9f5317371180d208b5b /Zend/zend_API.c | |
parent | 645f84e41bbda22c7a19326cd1a7df7994678976 (diff) | |
parent | dbb72de6c75796803ed6ed103763a12eebc9e78e (diff) | |
download | php-git-dfeb91acc7d44cc5035db34a31310dc3075df11f.tar.gz |
Merge branch 'PHP-5.3' of git.php.net:php-src into PHP-5.3
* 'PHP-5.3' of git.php.net:php-src: (123 commits)
Re-fixed bug #60901 (Improve "tail" syntax for AIX installation)
updated NEWS
Fixed bug #63284 PCRE upgrade to 8.31
preg indenpent test script for #63055
Update libmagic.patch
Add fix & missing fix
Fixed bug #63307 (Unused variable in oci8.c)
Fixed bug #63265 (Add ORA-00028 to the PHP_OCI_HANDLE_ERROR macro)
- Updated to version 2012.7 (2012g)
SUpport newer bisons.
Merge the fix for #61964 to 5.3, which will fix #63304
indent
better fix for #63055
Fixed bug #63055 (Segfault in zend_gc with SF2 testsuite)
PHP 5.3.18 NEWS
fix NEWS
fix compilation failure on 32/64bit linux systems, when libmysql is used with ext/mysql
Remove executable permission on inc
Remove executable permission on phpt
Fixed bug #63236 (Executable permission on various source files)
...
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r-- | Zend/zend_API.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 6d2ccd2c69..d529775764 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2122,7 +2122,9 @@ void module_destructor(zend_module_entry *module) /* {{{ */ /* Deinitilaise module globals */ if (module->globals_size) { #ifdef ZTS - ts_free_id(*module->globals_id_ptr); + if (*module->globals_id_ptr) { + ts_free_id(*module->globals_id_ptr); + } #else if (module->globals_dtor) { module->globals_dtor(module->globals_ptr TSRMLS_CC); @@ -2342,16 +2344,15 @@ static const zend_function_entry disabled_class_new[] = { ZEND_API int zend_disable_class(char *class_name, uint class_name_length TSRMLS_DC) /* {{{ */ { - zend_class_entry disabled_class; + zend_class_entry **disabled_class; zend_str_tolower(class_name, class_name_length); - if (zend_hash_del(CG(class_table), class_name, class_name_length+1)==FAILURE) { + if (zend_hash_find(CG(class_table), class_name, class_name_length+1, (void **)&disabled_class)==FAILURE) { return FAILURE; } - INIT_OVERLOADED_CLASS_ENTRY_EX(disabled_class, class_name, class_name_length, disabled_class_new, NULL, NULL, NULL, NULL, NULL); - disabled_class.create_object = display_disabled_class; - disabled_class.name_length = class_name_length; - zend_register_internal_class(&disabled_class TSRMLS_CC); + INIT_CLASS_ENTRY_INIT_METHODS((**disabled_class), disabled_class_new, NULL, NULL, NULL, NULL, NULL); + (*disabled_class)->create_object = display_disabled_class; + zend_hash_clean(&((*disabled_class)->function_table)); return SUCCESS; } /* }}} */ @@ -2425,7 +2426,6 @@ static int zend_is_callable_check_class(const char *name, int name_len, zend_fca } /* }}} */ - static int zend_is_callable_check_func(int check_flags, zval *callable, zend_fcall_info_cache *fcc, int strict_class, char **error TSRMLS_DC) /* {{{ */ { zend_class_entry *ce_org = fcc->calling_scope; @@ -2447,11 +2447,9 @@ static int zend_is_callable_check_func(int check_flags, zval *callable, zend_fca /* Skip leading \ */ if (Z_STRVAL_P(callable)[0] == '\\') { mlen = Z_STRLEN_P(callable) - 1; - mname = Z_STRVAL_P(callable) + 1; lmname = zend_str_tolower_dup(Z_STRVAL_P(callable) + 1, mlen); } else { mlen = Z_STRLEN_P(callable); - mname = Z_STRVAL_P(callable); lmname = zend_str_tolower_dup(Z_STRVAL_P(callable), mlen); } /* Check if function with given name exists. @@ -2605,7 +2603,14 @@ get_function_via_handler: if (retval) { if (fcc->calling_scope && !call_via_handler) { - if (!fcc->object_ptr && !(fcc->function_handler->common.fn_flags & ZEND_ACC_STATIC)) { + if (!fcc->object_ptr && (fcc->function_handler->common.fn_flags & ZEND_ACC_ABSTRACT)) { + if (error) { + zend_spprintf(error, 0, "cannot call abstract method %s::%s()", fcc->calling_scope->name, fcc->function_handler->common.function_name); + retval = 0; + } else { + zend_error(E_ERROR, "Cannot call abstract method %s::%s()", fcc->calling_scope->name, fcc->function_handler->common.function_name); + } + } else if (!fcc->object_ptr && !(fcc->function_handler->common.fn_flags & ZEND_ACC_STATIC)) { int severity; char *verb; if (fcc->function_handler->common.fn_flags & ZEND_ACC_ALLOW_STATIC) { |