[Pkg-php-commits] [php/debian-sid] Cherry pick fix for segfault when using several cloned intl objects
Ondřej Surý
ondrej at sury.org
Wed Jan 5 10:06:14 UTC 2011
---
...lt-when-using-several-cloned-intl-objects.patch | 130 ++++++++++++++++++++
debian/patches/series | 1 +
2 files changed, 131 insertions(+), 0 deletions(-)
create mode 100644 debian/patches/fix-segfault-when-using-several-cloned-intl-objects.patch
diff --git a/debian/patches/fix-segfault-when-using-several-cloned-intl-objects.patch b/debian/patches/fix-segfault-when-using-several-cloned-intl-objects.patch
new file mode 100644
index 0000000..0f02991
--- /dev/null
+++ b/debian/patches/fix-segfault-when-using-several-cloned-intl-objects.patch
@@ -0,0 +1,130 @@
+--- a/ext/intl/collator/collator_class.c
++++ b/ext/intl/collator/collator_class.c
+@@ -29,6 +29,7 @@
+ #include <unicode/ucol.h>
+
+ zend_class_entry *Collator_ce_ptr = NULL;
++static zend_object_handlers Collator_handlers;
+
+ /*
+ * Auxiliary functions needed by objects of 'Collator' class
+@@ -73,7 +74,7 @@ zend_object_value Collator_object_create
+ (zend_objects_free_object_storage_t)Collator_objects_free,
+ NULL TSRMLS_CC );
+
+- retval.handlers = zend_get_std_object_handlers();
++ retval.handlers = &Collator_handlers;
+
+ return retval;
+ }
+@@ -142,6 +143,10 @@ void collator_register_Collator_class( T
+ ce.create_object = Collator_object_create;
+ Collator_ce_ptr = zend_register_internal_class( &ce TSRMLS_CC );
+
++ memcpy(&Collator_handlers, zend_get_std_object_handlers(),
++ sizeof Collator_handlers);
++ Collator_handlers.clone_obj = NULL;
++
+ /* Declare 'Collator' class properties. */
+ if( !Collator_ce_ptr )
+ {
+--- a/ext/intl/resourcebundle/resourcebundle_class.c
++++ b/ext/intl/resourcebundle/resourcebundle_class.c
+@@ -420,6 +420,7 @@ void resourcebundle_register_class( TSRM
+ }
+
+ ResourceBundle_object_handlers = std_object_handlers;
++ ResourceBundle_object_handlers.clone_obj = NULL;
+ ResourceBundle_object_handlers.read_dimension = resourcebundle_array_get;
+ ResourceBundle_object_handlers.count_elements = resourcebundle_array_count;
+ }
+--- a/ext/intl/dateformat/dateformat_class.c
++++ b/ext/intl/dateformat/dateformat_class.c
+@@ -24,6 +24,7 @@
+ #include "dateformat_attr.h"
+
+ zend_class_entry *IntlDateFormatter_ce_ptr = NULL;
++static zend_object_handlers IntlDateFormatter_handlers;
+
+ /*
+ * Auxiliary functions needed by objects of 'IntlDateFormatter' class
+@@ -73,7 +74,7 @@ zend_object_value IntlDateFormatter_obje
+ (zend_objects_free_object_storage_t)IntlDateFormatter_object_free,
+ NULL TSRMLS_CC );
+
+- retval.handlers = zend_get_std_object_handlers();
++ retval.handlers = &IntlDateFormatter_handlers;
+
+ return retval;
+ }
+@@ -161,6 +162,10 @@ void dateformat_register_IntlDateFormatt
+ ce.create_object = IntlDateFormatter_object_create;
+ IntlDateFormatter_ce_ptr = zend_register_internal_class( &ce TSRMLS_CC );
+
++ memcpy(&IntlDateFormatter_handlers, zend_get_std_object_handlers(),
++ sizeof IntlDateFormatter_handlers);
++ IntlDateFormatter_handlers.clone_obj = NULL;
++
+ /* Declare 'IntlDateFormatter' class properties. */
+ if( !IntlDateFormatter_ce_ptr )
+ {
+--- a/ext/intl/msgformat/msgformat_class.c
++++ b/ext/intl/msgformat/msgformat_class.c
+@@ -25,6 +25,7 @@
+ #include "msgformat_attr.h"
+
+ zend_class_entry *MessageFormatter_ce_ptr = NULL;
++static zend_object_handlers MessageFormatter_handlers;
+
+ /*
+ * Auxiliary functions needed by objects of 'MessageFormatter' class
+@@ -66,7 +67,7 @@ zend_object_value MessageFormatter_objec
+ (zend_objects_free_object_storage_t)MessageFormatter_object_free,
+ NULL TSRMLS_CC );
+
+- retval.handlers = zend_get_std_object_handlers();
++ retval.handlers = &MessageFormatter_handlers;
+
+ return retval;
+ }
+@@ -135,6 +136,10 @@ void msgformat_register_class( TSRMLS_D
+ ce.create_object = MessageFormatter_object_create;
+ MessageFormatter_ce_ptr = zend_register_internal_class( &ce TSRMLS_CC );
+
++ memcpy(&MessageFormatter_handlers, zend_get_std_object_handlers(),
++ sizeof MessageFormatter_handlers);
++ MessageFormatter_handlers.clone_obj = NULL;
++
+ /* Declare 'MessageFormatter' class properties. */
+ if( !MessageFormatter_ce_ptr )
+ {
+--- a/ext/intl/formatter/formatter_class.c
++++ b/ext/intl/formatter/formatter_class.c
+@@ -25,6 +25,7 @@
+ #include "formatter_attr.h"
+
+ zend_class_entry *NumberFormatter_ce_ptr = NULL;
++static zend_object_handlers NumberFormatter_handlers;
+
+ /*
+ * Auxiliary functions needed by objects of 'NumberFormatter' class
+@@ -69,7 +70,7 @@ zend_object_value NumberFormatter_object
+ (zend_objects_free_object_storage_t)NumberFormatter_object_free,
+ NULL TSRMLS_CC );
+
+- retval.handlers = zend_get_std_object_handlers();
++ retval.handlers = &NumberFormatter_handlers;
+
+ return retval;
+ }
+@@ -171,6 +172,10 @@ void formatter_register_class( TSRMLS_D
+ ce.create_object = NumberFormatter_object_create;
+ NumberFormatter_ce_ptr = zend_register_internal_class( &ce TSRMLS_CC );
+
++ memcpy(&NumberFormatter_handlers, zend_get_std_object_handlers(),
++ sizeof NumberFormatter_handlers);
++ NumberFormatter_handlers.clone_obj = NULL;
++
+ /* Declare 'NumberFormatter' class properties. */
+ if( !NumberFormatter_ce_ptr )
+ {
diff --git a/debian/patches/series b/debian/patches/series
index 16271f9..2397914 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -87,3 +87,4 @@ fix-memory-leak-inside-highlight_string.patch
fix-segfault-in-pgsql_stmt_execute-when-postgres-is-down.patch
fix-segfault-when-extending-SplFixedArray.patch
fix-segfault-when-node-is-NULL-in-simplexml.patch
+fix-segfault-when-using-several-cloned-intl-objects.patch
--
1.7.1
More information about the Pkg-php-commits
mailing list