tony2001 Tue Jun 6 21:44:34 2006 UTC
Modified files: (Branch: PHP_5_2)
/php-src/ext/xmlreader php_xmlreader.c
Log:
implement a dummy clone_obj handler for ze1 compat mode
(fixes segfault on every XMLReader instantiation)
http://cvs.php.net/viewcvs.cgi/php-src/ext/xmlreader/php_xmlreader.c?r1=1.13.2.14.2.1&r2=1.13.2.14.2.2&diff_format=u
Index: php-src/ext/xmlreader/php_xmlreader.c
diff -u php-src/ext/xmlreader/php_xmlreader.c:1.13.2.14.2.1
php-src/ext/xmlreader/php_xmlreader.c:1.13.2.14.2.2
--- php-src/ext/xmlreader/php_xmlreader.c:1.13.2.14.2.1 Wed May 10 12:04:46 2006
+++ php-src/ext/xmlreader/php_xmlreader.c Tue Jun 6 21:44:34 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_xmlreader.c,v 1.13.2.14.2.1 2006/05/10 12:04:46 rrichards Exp $ */
+/* $Id: php_xmlreader.c,v 1.13.2.14.2.2 2006/06/06 21:44:34 tony2001 Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -35,6 +35,7 @@
zend_class_entry *xmlreader_class_entry;
static zend_object_handlers xmlreader_object_handlers;
+static zend_object_handlers xmlreader_object_handlers_ze1;
static HashTable xmlreader_prop_handlers;
@@ -351,6 +352,14 @@
}
/* }}} */
+/* {{{ xmlreader_objects_ze1_clone_obj */
+zend_object_value xmlreader_objects_ze1_clone_obj(zval *object TSRMLS_DC)
+{
+ php_error(E_ERROR, "Cannot clone object of class %s due to
'zend.ze1_compatibility_mode'", Z_OBJCE_P(object)->name);
+ return object->value.obj;
+}
+/* }}} */
+
/* {{{ xmlreader_free_resources */
static void xmlreader_free_resources(xmlreader_object *intern) {
if (intern) {
@@ -404,7 +413,7 @@
zend_hash_copy(intern->std.properties, &class_type->default_properties,
(copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
retval.handle = zend_objects_store_put(intern,
(zend_objects_store_dtor_t)zend_objects_destroy_object,
(zend_objects_free_object_storage_t) xmlreader_objects_free_storage,
xmlreader_objects_clone TSRMLS_CC);
intern->handle = retval.handle;
- retval.handlers = &xmlreader_object_handlers;
+ retval.handlers = EG(ze1_compatibility_mode) ?
&xmlreader_object_handlers_ze1 : &xmlreader_object_handlers;
return retval;
}
/* }}} */
@@ -1199,6 +1208,12 @@
xmlreader_object_handlers.write_property = xmlreader_write_property;
xmlreader_object_handlers.get_property_ptr_ptr =
xmlreader_get_property_ptr_ptr;
+ memcpy(&xmlreader_object_handlers_ze1, zend_get_std_object_handlers(),
sizeof(zend_object_handlers));
+ xmlreader_object_handlers_ze1.read_property = xmlreader_read_property;
+ xmlreader_object_handlers_ze1.write_property = xmlreader_write_property;
+ xmlreader_object_handlers_ze1.get_property_ptr_ptr =
xmlreader_get_property_ptr_ptr;
+ xmlreader_object_handlers_ze1.clone_obj =
xmlreader_objects_ze1_clone_obj;
+
INIT_CLASS_ENTRY(ce, "XMLReader", xmlreader_functions);
ce.create_object = xmlreader_objects_new;
xmlreader_class_entry = zend_register_internal_class(&ce TSRMLS_CC);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php