Skip to content

Commit

Permalink
- Fixed bug #53612 (Segmentation fault when using several cloned intl
Browse files Browse the repository at this point in the history
  objects).
  • Loading branch information
cataphract committed Dec 27, 2010
1 parent cc17595 commit 9ec9210
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 4 deletions.
2 changes: 2 additions & 0 deletions NEWS
Expand Up @@ -36,6 +36,8 @@
- Intl extension:
. Fixed bug #53512 (NumberFormatter::setSymbol crash on bogus $attr values).
(Felipe)
. Fixed bug #53612 (Segmentation fault when using cloned several intl
objects). (Gustavo)

- MySQL Improved extension:
. Fixed bug #53503 (mysqli::query returns false after successful LOAD DATA
Expand Down
7 changes: 6 additions & 1 deletion ext/intl/collator/collator_class.c
Expand Up @@ -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
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -142,6 +143,10 @@ void collator_register_Collator_class( TSRMLS_D )
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 )
{
Expand Down
7 changes: 6 additions & 1 deletion ext/intl/dateformat/dateformat_class.c
Expand Up @@ -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
Expand Down Expand Up @@ -73,7 +74,7 @@ zend_object_value IntlDateFormatter_object_create(zend_class_entry *ce TSRMLS_DC
(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;
}
Expand Down Expand Up @@ -161,6 +162,10 @@ void dateformat_register_IntlDateFormatter_class( TSRMLS_D )
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 )
{
Expand Down
7 changes: 6 additions & 1 deletion ext/intl/formatter/formatter_class.c
Expand Up @@ -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
Expand Down Expand Up @@ -69,7 +70,7 @@ zend_object_value NumberFormatter_object_create(
(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;
}
Expand Down Expand Up @@ -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 )
{
Expand Down
7 changes: 6 additions & 1 deletion ext/intl/msgformat/msgformat_class.c
Expand Up @@ -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
Expand Down Expand Up @@ -66,7 +67,7 @@ zend_object_value MessageFormatter_object_create(zend_class_entry *ce TSRMLS_DC)
(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;
}
Expand Down Expand Up @@ -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 )
{
Expand Down
1 change: 1 addition & 0 deletions ext/intl/resourcebundle/resourcebundle_class.c
Expand Up @@ -420,6 +420,7 @@ void resourcebundle_register_class( TSRMLS_D )
}

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;
}
Expand Down

0 comments on commit 9ec9210

Please sign in to comment.