From c8c629b3fcc1e531863b726faac843a3d8dde80d Mon Sep 17 00:00:00 2001 From: Andi Gutmans Date: Tue, 12 Mar 2002 18:53:27 +0000 Subject: [PATCH] - Fix bug introduced with latest class hash table change. --- Zend/zend_compile.c | 2 +- Zend/zend_compile.h | 2 +- Zend/zend_execute.c | 2 +- Zend/zend_opcode.c | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index e0540ffe48..d1fc686b6e 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2048,7 +2048,7 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znod CG(active_ce_parent_class_name).value.str.val = estrndup(parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len); CG(active_ce_parent_class_name).value.str.len = parent_class_name->u.constant.value.str.len; - if (zend_hash_find(CG(active_class_entry)?&CG(active_class_entry)->class_table:CG(class_table), parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len+1, (void **) &parent_class)==SUCCESS) { + if (zend_hash_find(CG(active_class_entry)?&CG(active_class_entry)->class_table:CG(class_table), parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len+1, (void **) &parent_class_p)==SUCCESS) { parent_class = *parent_class_p; /* copy functions */ zend_hash_copy(&new_class_entry->function_table, &parent_class->function_table, (copy_ctor_func_t) function_add_ref, &tmp_zend_function, sizeof(zend_function)); diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index bc6dbd21c6..330bad464c 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -388,7 +388,7 @@ ZEND_API void zend_file_handle_dtor(zend_file_handle *fh); ZEND_API void destroy_zend_function(zend_function *function); ZEND_API void destroy_zend_class(zend_class_entry **pce); -void zend_class_add_ref(zend_class_entry *ce); +void zend_class_add_ref(zend_class_entry **ce); #define ZEND_FUNCTION_DTOR (void (*)(void *)) destroy_zend_function #define ZEND_CLASS_DTOR (void (*)(void *)) destroy_zend_class diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 5253113ab3..ce33a59b83 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1754,7 +1754,7 @@ binary_assign_op_addr_obj: if (zend_hash_add(EG(class_table), class_name_strval, class_name_strlen + 1, import_ce, sizeof(zend_class_entry *), NULL) == FAILURE) { zend_error(E_ERROR, "Import: class %s already exists in current scope", class_name_strval); } - zend_class_add_ref(*import_ce); + zend_class_add_ref(import_ce); } else { zend_class_entry *tmp_zend_class_entry; diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c index 6e5ca2aad2..9de9c78a4f 100644 --- a/Zend/zend_opcode.c +++ b/Zend/zend_opcode.c @@ -142,9 +142,9 @@ ZEND_API void destroy_zend_class(zend_class_entry **pce) } -void zend_class_add_ref(zend_class_entry *ce) +void zend_class_add_ref(zend_class_entry **ce) { - (*ce->refcount)++; + (*(*ce)->refcount)++; } -- 2.50.1