diff options
author | Stanislav Malyshev <stas@php.net> | 2003-04-21 12:14:12 +0000 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2003-04-21 12:14:12 +0000 |
commit | c5b1314e0561b84cd1639899bf303c993f8e66af (patch) | |
tree | bbafcc32582e1add2e219db57b9e6e8b5eabbada | |
parent | 17f3aca625e52c88ca4252807afa963258574c06 (diff) | |
download | php-git-c5b1314e0561b84cd1639899bf303c993f8e66af.tar.gz |
make import * fail if such classes or functions already there
-rw-r--r-- | Zend/zend_execute.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 81fae9f689..42dd8ebfc1 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -2196,6 +2196,13 @@ int zend_add_var_handler(ZEND_OPCODE_HANDLER_ARGS) NEXT_OPCODE(); } +static int zend_import_check_function(HashTable *target_ht, zend_function *function, zend_hash_key *hash_key, void *param) +{ + if(zend_hash_quick_exists(target_ht, hash_key->arKey, hash_key->nKeyLength, hash_key->h)) { + zend_error(E_ERROR, "Import: function %s() already exists in current scope", function->common.function_name?function->common.function_name:"main"); + } + return 1; /* OK */ +} int zend_import_function_handler(ZEND_OPCODE_HANDLER_ARGS) { @@ -2219,13 +2226,18 @@ int zend_import_function_handler(ZEND_OPCODE_HANDLER_ARGS) } function_add_ref(function); } else { - zend_function tmp_zend_function; - - zend_hash_copy(EG(function_table), &ce->function_table, (copy_ctor_func_t) function_add_ref, &tmp_zend_function, sizeof(zend_function)); + zend_hash_merge_ex(EG(function_table), &ce->function_table, (copy_ctor_func_t) function_add_ref, sizeof(zend_function), (merge_checker_func_t)zend_import_check_function, NULL); } NEXT_OPCODE(); } +static int zend_import_check_class(HashTable *target_ht, zend_class_entry **ce, zend_hash_key *hash_key, void *param) +{ + if(zend_hash_quick_exists(target_ht, hash_key->arKey, hash_key->nKeyLength, hash_key->h)) { + zend_error(E_ERROR, "Import: class '%s' already exists in current scope", (*ce)->name); + } + return 1; /* OK */ +} int zend_import_class_handler(ZEND_OPCODE_HANDLER_ARGS) { @@ -2249,9 +2261,7 @@ int zend_import_class_handler(ZEND_OPCODE_HANDLER_ARGS) } zend_class_add_ref(import_ce); } else { - zend_class_entry *tmp_zend_class_entry; - - zend_hash_copy(EG(class_table), &ce->class_table, (copy_ctor_func_t) zend_class_add_ref, &tmp_zend_class_entry, sizeof(zend_class_entry *)); + zend_hash_merge_ex(EG(class_table), &ce->class_table, (copy_ctor_func_t) zend_class_add_ref, sizeof(zend_class_entry *), (merge_checker_func_t)zend_import_check_class, NULL); } NEXT_OPCODE(); |