diff options
author | ULF WENDEL <uw@php.net> | 2012-10-22 13:37:37 +0200 |
---|---|---|
committer | ULF WENDEL <uw@php.net> | 2012-10-22 13:37:37 +0200 |
commit | dfeb91acc7d44cc5035db34a31310dc3075df11f (patch) | |
tree | e6e1b6c6898fc10eb602a9f5317371180d208b5b /ext/intl/msgformat/msgformat_class.c | |
parent | 645f84e41bbda22c7a19326cd1a7df7994678976 (diff) | |
parent | dbb72de6c75796803ed6ed103763a12eebc9e78e (diff) | |
download | php-git-dfeb91acc7d44cc5035db34a31310dc3075df11f.tar.gz |
Merge branch 'PHP-5.3' of git.php.net:php-src into PHP-5.3
* 'PHP-5.3' of git.php.net:php-src: (123 commits)
Re-fixed bug #60901 (Improve "tail" syntax for AIX installation)
updated NEWS
Fixed bug #63284 PCRE upgrade to 8.31
preg indenpent test script for #63055
Update libmagic.patch
Add fix & missing fix
Fixed bug #63307 (Unused variable in oci8.c)
Fixed bug #63265 (Add ORA-00028 to the PHP_OCI_HANDLE_ERROR macro)
- Updated to version 2012.7 (2012g)
SUpport newer bisons.
Merge the fix for #61964 to 5.3, which will fix #63304
indent
better fix for #63055
Fixed bug #63055 (Segfault in zend_gc with SF2 testsuite)
PHP 5.3.18 NEWS
fix NEWS
fix compilation failure on 32/64bit linux systems, when libmysql is used with ext/mysql
Remove executable permission on inc
Remove executable permission on phpt
Fixed bug #63236 (Executable permission on various source files)
...
Diffstat (limited to 'ext/intl/msgformat/msgformat_class.c')
-rw-r--r-- | ext/intl/msgformat/msgformat_class.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/ext/intl/msgformat/msgformat_class.c b/ext/intl/msgformat/msgformat_class.c index 7ed28df3dc..d6ba9b1c67 100644 --- a/ext/intl/msgformat/msgformat_class.c +++ b/ext/intl/msgformat/msgformat_class.c @@ -24,6 +24,8 @@ #include "msgformat.h" #include "msgformat_attr.h" +#include <zend_exceptions.h> + zend_class_entry *MessageFormatter_ce_ptr = NULL; static zend_object_handlers MessageFormatter_handlers; @@ -80,18 +82,24 @@ zend_object_value MessageFormatter_object_clone(zval *object TSRMLS_DC) zend_object_handle handle = Z_OBJ_HANDLE_P(object); MessageFormatter_object *mfo, *new_mfo; - MSG_FORMAT_METHOD_FETCH_OBJECT; - new_obj_val = MessageFormatter_ce_ptr->create_object(MessageFormatter_ce_ptr TSRMLS_CC); + MSG_FORMAT_METHOD_FETCH_OBJECT_NO_CHECK; + new_obj_val = MessageFormatter_ce_ptr->create_object(Z_OBJCE_P(object) TSRMLS_CC); new_mfo = (MessageFormatter_object *)zend_object_store_get_object_by_handle(new_obj_val.handle TSRMLS_CC); /* clone standard parts */ zend_objects_clone_members(&new_mfo->zo, new_obj_val, &mfo->zo, handle TSRMLS_CC); + /* clone formatter object */ - MSG_FORMAT_OBJECT(new_mfo) = umsg_clone(MSG_FORMAT_OBJECT(mfo), &INTL_DATA_ERROR_CODE(new_mfo)); - if(U_FAILURE(INTL_DATA_ERROR_CODE(new_mfo))) { - /* set up error in case error handler is interested */ - intl_error_set( NULL, INTL_DATA_ERROR_CODE(new_mfo), "Failed to clone MessageFormatter object", 0 TSRMLS_CC ); - MessageFormatter_object_dtor(new_mfo, new_obj_val.handle TSRMLS_CC); /* free new object */ - zend_error(E_ERROR, "Failed to clone MessageFormatter object"); + if (MSG_FORMAT_OBJECT(mfo) != NULL) { + MSG_FORMAT_OBJECT(new_mfo) = umsg_clone(MSG_FORMAT_OBJECT(mfo), + &INTL_DATA_ERROR_CODE(mfo)); + + if (U_FAILURE(INTL_DATA_ERROR_CODE(mfo))) { + intl_errors_set(INTL_DATA_ERROR_P(mfo), INTL_DATA_ERROR_CODE(mfo), + "Failed to clone MessageFormatter object", 0 TSRMLS_CC); + zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Failed to clone MessageFormatter object"); + } + } else { + zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Cannot clone unconstructed MessageFormatter"); } return new_obj_val; } |