summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/aggregation.c3
-rw-r--r--sapi/apache/mod_php4.c11
-rw-r--r--sapi/apache_hooks/mod_php4.c11
3 files changed, 21 insertions, 4 deletions
diff --git a/ext/standard/aggregation.c b/ext/standard/aggregation.c
index 5f47b96a32..7c8d6f1c05 100644
--- a/ext/standard/aggregation.c
+++ b/ext/standard/aggregation.c
@@ -391,13 +391,16 @@ static void aggregate(INTERNAL_FUNCTION_PARAMETERS, int aggr_what, int aggr_type
zend_hash_init(&new_ce->class_table, 10, NULL, ZVAL_PTR_DTOR, 0);
zend_hash_copy(&new_ce->class_table, &Z_OBJCE_P(obj)->class_table, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
+ /*
zend_hash_init(&new_ce->private_properties, 10, NULL, ZVAL_PTR_DTOR, 0);
zend_hash_copy(&new_ce->private_properties, &Z_OBJCE_P(obj)->private_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
+ */
new_ce->constructor = Z_OBJCE_P(obj)->constructor;
new_ce->destructor = Z_OBJCE_P(obj)->destructor;
new_ce->clone = Z_OBJCE_P(obj)->clone;
#endif
+
new_ce->builtin_functions = Z_OBJCE_P(obj)->builtin_functions;
#ifndef ZEND_ENGINE_2
new_ce->handle_function_call = Z_OBJCE_P(obj)->handle_function_call;
diff --git a/sapi/apache/mod_php4.c b/sapi/apache/mod_php4.c
index 0a14fd6804..1514db72d6 100644
--- a/sapi/apache/mod_php4.c
+++ b/sapi/apache/mod_php4.c
@@ -672,8 +672,15 @@ static void copy_per_dir_entry(php_per_dir_entry *per_dir_entry)
/* {{{ should_overwrite_per_dir_entry
*/
-static zend_bool should_overwrite_per_dir_entry(php_per_dir_entry *orig_per_dir_entry, php_per_dir_entry *new_per_dir_entry)
+static zend_bool should_overwrite_per_dir_entry(HashTable *target_ht, php_per_dir_entry *orig_per_dir_entry, zend_hash_key *hash_key, void *pData)
{
+ php_per_dir_entry *orig_per_dir_entry;
+ php_per_dir_entry *new_per_dir_entry;
+
+ if (zend_hash_find(target_ht, hash_key->arKey, hash_key->nKeyLength, (void **) &new_per_dir_entry)==FAILURE) {
+ return 1; /* does not exist in dest, copy from source */
+ }
+
if (new_per_dir_entry->type==PHP_INI_SYSTEM
&& orig_per_dir_entry->type!=PHP_INI_SYSTEM) {
return 1;
@@ -711,7 +718,7 @@ static void *php_create_dir(pool *p, char *dummy)
static void *php_merge_dir(pool *p, void *basev, void *addv)
{
/* This function *must* return addv, and not modify basev */
- zend_hash_merge_ex((HashTable *) addv, (HashTable *) basev, (copy_ctor_func_t) copy_per_dir_entry, sizeof(php_per_dir_entry), (zend_bool (*)(void *, void *)) should_overwrite_per_dir_entry);
+ zend_hash_merge_ex((HashTable *) addv, (HashTable *) basev, (copy_ctor_func_t) copy_per_dir_entry, sizeof(php_per_dir_entry), (merge_checker_func_t) should_overwrite_per_dir_entry, NULL);
return addv;
}
/* }}} */
diff --git a/sapi/apache_hooks/mod_php4.c b/sapi/apache_hooks/mod_php4.c
index 4b7a620680..f5d71ca7ce 100644
--- a/sapi/apache_hooks/mod_php4.c
+++ b/sapi/apache_hooks/mod_php4.c
@@ -786,8 +786,15 @@ static void copy_per_dir_entry(php_per_dir_entry *per_dir_entry)
/* {{{ should_overwrite_per_dir_entry
*/
-static zend_bool should_overwrite_per_dir_entry(php_per_dir_entry *orig_per_dir_entry, php_per_dir_entry *new_per_dir_entry)
+static zend_bool should_overwrite_per_dir_entry(HashTable *target_ht, php_per_dir_entry *orig_per_dir_entry, zend_hash_key *hash_key, void *pData)
{
+ php_per_dir_entry *orig_per_dir_entry;
+ php_per_dir_entry *new_per_dir_entry;
+
+ if (zend_hash_find(target_ht, hash_key->arKey, hash_key->nKeyLength, (void **) &new_per_dir_entry)==FAILURE) {
+ return 1; /* does not exist in dest, copy from source */
+ }
+
if (new_per_dir_entry->type==PHP_INI_SYSTEM
&& orig_per_dir_entry->type!=PHP_INI_SYSTEM) {
return 1;
@@ -868,7 +875,7 @@ static void *php_merge_dir(pool *p, void *basev, void *addv)
php_per_dir_config *a = (php_per_dir_config *) addv;
php_per_dir_config *b = (php_per_dir_config *) basev;
/* This function *must* return addv, and not modify basev */
- zend_hash_merge_ex((HashTable *) a->ini_settings, (HashTable *) b->ini_settings, (copy_ctor_func_t) copy_per_dir_entry, sizeof(php_per_dir_entry), (zend_bool (*)(void *, void *)) should_overwrite_per_dir_entry);
+ zend_hash_merge_ex((HashTable *) a->ini_settings, (HashTable *) b->ini_settings, (copy_ctor_func_t) copy_per_dir_entry, sizeof(php_per_dir_entry), (replace_checker_func_t) should_overwrite_per_dir_entry, NULL);
a->headers_handlers = (a->headers_handlers.top)?a->headers_handlers:b->headers_handlers;
a->auth_handlers = (a->auth_handlers.top)?a->auth_handlers:b->auth_handlers;
a->access_handlers = (a->access_handlers.top)?a->access_handlers:b->access_handlers;