[php-src] Issue #8155: std_object_handlers not interceptable?

From: Date: Sat, 26 Feb 2022 17:58:13 +0000
Subject: [php-src] Issue #8155: std_object_handlers not interceptable?
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-240048@lists.php.net to get a copy of this message
Issue: https://github.com/php/php-src/issues/8155 Comment Author: bwoebi basically, in a bit of pseudo code: ```C typedef struct { zend_object_handlers *original_handlers; zend_object (*original_create)(zend_class_entry *); zend_object_handlers custom_handlers; } original_class_data; HashTable<zend_class_entry *, original_class_data> original_info; void wrapped_custom_dtor(zend_object *obj) { original_class_data *class_data = (original_class_data *)zend_hash_find_ptr(&original_info, obj->ce); // do some stuff class_data->original_handlers->dtor_obj(obj); } zend_object *wrapper_create_object(zend_class_entry *ce) { original_class_data *class_data = (original_class_data *)zend_hash_find_ptr(&original_info, ce); zend_object *obj = class_data->original_create(ce); class_data->original_handlers = obj->handlers; memcpy(&class_data->custom_handlers, obj->handlers, sizeof(zend_object_handlers)); // and whatever else you need to wrap class_data->custom_handlers.dtor_obj = wrapped_custom_dtor; obj->handlers = &class_data->custom_handlers; return obj; } foreach (EG(class_table) as class_entry) { original_class_data data; data.original_create = class_entry->create_object; class_entry->create_object = wrapper_create_object zend_hash_add_ptr(&original_info, class_entry, &data); } ```

« previous php.bugs (#240048) next »