com php-src: Fixed segfault in intlgregcal_create_instance : ext/intl/calendar/gregoriancalendar_methods.cpp ext /intl/intl_data.h
| From: | Xinchen Hui | Date: | Sun, 29 Jun 2014 14:56:27 +0000 |
| Subject: | com php-src: Fixed segfault in intlgregcal_create_instance : ext/intl/calendar/gregoriancalendar_methods.cpp ext /intl/intl_data.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-79135@lists.php.net to get a copy of this message | ||
Commit: 499293449bbd3ef2f7dd3e904ee1a469e4ea0433
Author: Xinchen Hui <laruence@php.net> Sun, 29 Jun 2014 22:56:27 +0800
Parents: f096bc4d86ce1736bfc89dc5e0e0d70b027cf799
Branches: phpng
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=499293449bbd3ef2f7dd3e904ee1a469e4ea0433
Log:
Fixed segfault in intlgregcal_create_instance
Changed paths:
M ext/intl/calendar/gregoriancalendar_methods..cpp
M ext/intl/intl_data.h
Diff:
diff --git a/ext/intl/calendar/gregoriancalendar_methods.cpp
b/ext/intl/calendar/gregoriancalendar_methods.cpp
index e08d263..41e2735 100644
--- a/ext/intl/calendar/gregoriancalendar_methods.cpp
+++ b/ext/intl/calendar/gregoriancalendar_methods.cpp
@@ -182,7 +182,8 @@ U_CFUNC PHP_FUNCTION(intlgregcal_create_instance)
_php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAM_PASSTHRU);
if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
- zend_object_store_ctor_failed(Z_OBJ(orig) TSRMLS_CC);
+ zval_dtor(&orig);
+ RETURN_NULL();
}
}
diff --git a/ext/intl/intl_data.h b/ext/intl/intl_data.h
index 4dd1508...1b764a2 100644
--- a/ext/intl/intl_data.h
+++ b/ext/intl/intl_data.h
@@ -69,6 +69,11 @@ typedef struct _intl_data {
if( U_FAILURE( INTL_DATA_ERROR_CODE((obj)) ) ) \
{ \
intl_errors_set_custom_msg( INTL_DATA_ERROR_P((obj)), msg, 0 TSRMLS_CC ); \
+ /* yes, this is ugly, but it alreay is */ \
+ if (return_value != getThis()) { \
+ zval_dtor(return_value); \
+ RETURN_NULL(); \
+ } \
Z_OBJ_P(return_value) = NULL; \
return; \
}