summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend.c4
-rw-r--r--Zend/zend.h2
-rw-r--r--Zend/zend_API.c44
-rw-r--r--Zend/zend_API.h2
-rw-r--r--ext/date/php_date.c40
-rw-r--r--ext/date/tests/DateTimeZone_construct_error.phpt15
-rw-r--r--ext/date/tests/DateTimeZone_construct_variation1.phpt2
-rw-r--r--ext/date/tests/DateTime_construct_error.phpt14
-rw-r--r--ext/date/tests/DateTime_construct_variation1.phpt4
-rw-r--r--ext/date/tests/DateTime_construct_variation2.phpt2
-rw-r--r--ext/dom/attr.c8
-rw-r--r--ext/dom/cdatasection.c8
-rw-r--r--ext/dom/comment.c8
-rw-r--r--ext/dom/document.c8
-rw-r--r--ext/dom/documentfragment.c8
-rw-r--r--ext/dom/element.c8
-rw-r--r--ext/dom/entityreference.c9
-rw-r--r--ext/dom/processinginstruction.c9
-rw-r--r--ext/dom/tests/DOMAttr_construct_error_001.phpt12
-rw-r--r--ext/dom/tests/DOMCDATASection_construct_error_001.phpt10
-rw-r--r--ext/dom/tests/DOMComment_construct_error_001.phpt12
-rw-r--r--ext/dom/tests/DOMDocumentFragment_construct_error_001.phpt12
-rw-r--r--ext/dom/text.c8
-rw-r--r--ext/dom/xpath.c8
-rw-r--r--ext/fileinfo/fileinfo.c14
-rw-r--r--ext/fileinfo/tests/bug61173.phpt14
-rw-r--r--ext/fileinfo/tests/finfo_open_error.phpt14
-rw-r--r--ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp3
-rw-r--r--ext/intl/calendar/gregoriancalendar_methods.cpp13
-rw-r--r--ext/intl/collator/collator_create.c9
-rw-r--r--ext/intl/converter/converter.c11
-rw-r--r--ext/intl/dateformat/dateformat_create.cpp9
-rw-r--r--ext/intl/formatter/formatter_main.c9
-rw-r--r--ext/intl/intl_error.c10
-rw-r--r--ext/intl/intl_error.h8
-rw-r--r--ext/intl/msgformat/msgformat.c9
-rw-r--r--ext/intl/resourcebundle/resourcebundle_class.c9
-rw-r--r--ext/intl/spoofchecker/spoofchecker_create.c7
-rw-r--r--ext/intl/tests/breakiter___construct_error.phpt6
-rw-r--r--ext/intl/tests/formatter_fail.phpt17
-rw-r--r--ext/intl/tests/gregoriancalendar___construct_error.phpt2
-rw-r--r--ext/intl/tests/msgfmt_fail.phpt25
-rw-r--r--ext/intl/tests/msgfmt_fail2.phpt25
-rw-r--r--ext/pdo/pdo_dbh.c6
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql___construct.phpt2
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt2
-rw-r--r--ext/phar/phar_object.c21
-rw-r--r--ext/phar/tests/badparameters.phpt2
-rw-r--r--ext/phar/tests/bug60261.phpt10
-rw-r--r--ext/phar/tests/pharfileinfo_construct.phpt15
-rw-r--r--ext/reflection/php_reflection.c86
-rw-r--r--ext/reflection/tests/ReflectionExtension_constructor_error.phpt9
-rw-r--r--ext/reflection/tests/ReflectionFunction_construct.001.phpt14
-rw-r--r--ext/reflection/tests/ReflectionMethod_006.phpt6
-rw-r--r--ext/reflection/tests/ReflectionMethod_constructor_error2.phpt6
-rw-r--r--ext/reflection/tests/ReflectionParameter_invalidMethodInConstructor.phpt2
-rw-r--r--ext/reflection/tests/ReflectionProperty_error.phpt9
-rw-r--r--ext/simplexml/simplexml.c7
-rw-r--r--ext/snmp/snmp.c9
-rw-r--r--ext/spl/spl_array.c13
-rw-r--r--ext/spl/spl_directory.c27
-rw-r--r--ext/spl/spl_fixedarray.c9
-rw-r--r--ext/spl/spl_iterators.c37
-rw-r--r--ext/spl/spl_observer.c7
-rw-r--r--ext/spl/tests/CallbackFilterIteratorTest-002.phpt10
-rw-r--r--ext/spl/tests/SplFixedArray__construct_param_array.phpt5
-rw-r--r--ext/spl/tests/SplFixedArray__construct_param_string.phpt3
-rw-r--r--ext/spl/tests/SplFixedArray_construct_param_SplFixedArray.phpt3
-rw-r--r--ext/spl/tests/SplTempFileObject_constructor_error.phpt12
-rw-r--r--ext/spl/tests/arrayObject___construct_error1.phpt4
-rw-r--r--ext/spl/tests/arrayObject___construct_error2.phpt4
-rw-r--r--ext/spl/tests/arrayObject_setIteratorClass_error1.phpt4
-rw-r--r--ext/spl/tests/bug54292.phpt2
-rw-r--r--ext/spl/tests/fixedarray_005.phpt24
-rw-r--r--ext/spl/tests/fixedarray_009.phpt3
-rw-r--r--ext/spl/tests/fixedarray_015.phpt3
-rw-r--r--ext/spl/tests/iterator_056.phpt59
-rw-r--r--ext/spl/tests/iterator_059.phpt17
-rw-r--r--ext/spl/tests/iterator_060.phpt17
-rw-r--r--ext/spl/tests/iterator_061.phpt17
-rw-r--r--ext/spl/tests/iterator_063.phpt17
-rw-r--r--ext/spl/tests/iterator_064.phpt15
-rw-r--r--ext/spl/tests/iterator_065.phpt15
-rw-r--r--ext/spl/tests/iterator_066.phpt15
-rw-r--r--ext/spl/tests/recursive_tree_iterator_003.phpt10
-rw-r--r--ext/spl/tests/spl_iterator_iterator_constructor.phpt20
-rw-r--r--ext/sqlite3/sqlite3.c13
-rw-r--r--ext/sqlite3/tests/sqlite3_02_open.phpt2
88 files changed, 424 insertions, 640 deletions
diff --git a/Zend/zend.c b/Zend/zend.c
index 99e560ac03..a7d456876a 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -1316,14 +1316,14 @@ ZEND_API void zend_type_error(const char *format, ...) /* {{{ */
va_end(va);
} /* }}} */
-ZEND_API void zend_internal_type_error(zend_bool strict, const char *format, ...) /* {{{ */
+ZEND_API void zend_internal_type_error(zend_bool throw_exception, const char *format, ...) /* {{{ */
{
va_list va;
char *message = NULL;
va_start(va, format);
zend_vspprintf(&message, 0, format, va);
- if (strict) {
+ if (throw_exception) {
zend_throw_exception(zend_get_type_exception(), message, E_ERROR);
} else {
zend_error(E_WARNING, message);
diff --git a/Zend/zend.h b/Zend/zend.h
index db132a583a..a9e65ae7ed 100644
--- a/Zend/zend.h
+++ b/Zend/zend.h
@@ -286,7 +286,7 @@ extern ZEND_API zend_string *(*zend_resolve_path)(const char *filename, int file
ZEND_API void zend_error(int type, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
ZEND_API void zend_type_error(const char *format, ...);
-ZEND_API void zend_internal_type_error(zend_bool strict, const char *format, ...);
+ZEND_API void zend_internal_type_error(zend_bool throw_exception, const char *format, ...);
void zenderror(const char *error);
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 8cd7ddd5d6..273e9e9f6a 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -761,13 +761,16 @@ static int zend_parse_arg(int arg_num, zval *arg, va_list *va, const char **spec
if (!(flags & ZEND_PARSE_PARAMS_QUIET) && (*expected_type || error)) {
const char *space;
const char *class_name = get_active_class_name(&space);
+ zend_bool throw_exception =
+ ZEND_ARG_USES_STRICT_TYPES() || (flags & ZEND_PARSE_PARAMS_THROW);
if (error) {
- zend_internal_type_error(ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects parameter %d %s",
- class_name, space, get_active_function_name(), arg_num, error);
+ zend_internal_type_error(throw_exception, "%s%s%s() expects parameter %d %s",
+ class_name, space, get_active_function_name(), arg_num, error);
efree(error);
} else {
- zend_internal_type_error(ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects parameter %d to be %s, %s given",
+ zend_internal_type_error(throw_exception,
+ "%s%s%s() expects parameter %d to be %s, %s given",
class_name, space, get_active_function_name(), arg_num, expected_type,
zend_zval_type_name(arg));
}
@@ -876,7 +879,9 @@ static int zend_parse_va_args(int num_args, const char *type_spec, va_list *va,
if (!(flags & ZEND_PARSE_PARAMS_QUIET)) {
zend_function *active_function = EG(current_execute_data)->func;
const char *class_name = active_function->common.scope ? active_function->common.scope->name->val : "";
- zend_internal_type_error(ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects %s %d parameter%s, %d given",
+ zend_bool throw_exception =
+ ZEND_ARG_USES_STRICT_TYPES() || (flags & ZEND_PARSE_PARAMS_THROW);
+ zend_internal_type_error(throw_exception, "%s%s%s() expects %s %d parameter%s, %d given",
class_name,
class_name[0] ? "::" : "",
active_function->common.function_name->val,
@@ -938,18 +943,19 @@ static int zend_parse_va_args(int num_args, const char *type_spec, va_list *va,
}
/* }}} */
-#define RETURN_IF_ZERO_ARGS(num_args, type_spec, flags) { \
+#define RETURN_IF_ZERO_ARGS(num_args, type_spec, flags) do { \
int __num_args = (num_args); \
- \
if (0 == (type_spec)[0] && 0 != __num_args && !(flags & ZEND_PARSE_PARAMS_QUIET)) { \
const char *__space; \
const char * __class_name = get_active_class_name(&__space); \
- zend_internal_type_error(ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects exactly 0 parameters, %d given", \
- __class_name, __space, \
- get_active_function_name(), __num_args); \
+ zend_bool throw_exception = \
+ ZEND_ARG_USES_STRICT_TYPES() || (flags & ZEND_PARSE_PARAMS_THROW); \
+ zend_internal_type_error(throw_exception, \
+ "%s%s%s() expects exactly 0 parameters, %d given", \
+ __class_name, __space, get_active_function_name(), __num_args); \
return FAILURE; \
- }\
-}
+ } \
+} while(0)
ZEND_API int zend_parse_parameters_ex(int flags, int num_args, const char *type_spec, ...) /* {{{ */
{
@@ -982,6 +988,22 @@ ZEND_API int zend_parse_parameters(int num_args, const char *type_spec, ...) /*
}
/* }}} */
+ZEND_API int zend_parse_parameters_throw(int num_args, const char *type_spec, ...) /* {{{ */
+{
+ va_list va;
+ int retval;
+ int flags = ZEND_PARSE_PARAMS_THROW;
+
+ RETURN_IF_ZERO_ARGS(num_args, type_spec, flags);
+
+ va_start(va, type_spec);
+ retval = zend_parse_va_args(num_args, type_spec, &va, flags);
+ va_end(va);
+
+ return retval;
+}
+/* }}} */
+
ZEND_API int zend_parse_method_parameters(int num_args, zval *this_ptr, const char *type_spec, ...) /* {{{ */
{
va_list va;
diff --git a/Zend/zend_API.h b/Zend/zend_API.h
index 23ec35f00c..a09d634ee7 100644
--- a/Zend/zend_API.h
+++ b/Zend/zend_API.h
@@ -257,8 +257,10 @@ ZEND_API int zend_copy_parameters_array(int param_count, zval *argument_array);
/* Parameter parsing API -- andrei */
#define ZEND_PARSE_PARAMS_QUIET (1<<1)
+#define ZEND_PARSE_PARAMS_THROW (1<<2)
ZEND_API int zend_parse_parameters(int num_args, const char *type_spec, ...);
ZEND_API int zend_parse_parameters_ex(int flags, int num_args, const char *type_spec, ...);
+ZEND_API int zend_parse_parameters_throw(int num_args, const char *type_spec, ...);
ZEND_API char *zend_zval_type_name(const zval *arg);
ZEND_API int zend_parse_method_parameters(int num_args, zval *this_ptr, const char *type_spec, ...);
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 8c6b2e5a1f..959ab4896c 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -2663,10 +2663,12 @@ PHP_METHOD(DateTime, __construct)
size_t time_str_len = 0;
zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, NULL, &error_handling);
- if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) {
- php_date_initialize(Z_PHPDATE_P(getThis()), time_str, time_str_len, NULL, timezone_object, 1);
+ if (FAILURE == zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) {
+ return;
}
+
+ zend_replace_error_handling(EH_THROW, NULL, &error_handling);
+ php_date_initialize(Z_PHPDATE_P(getThis()), time_str, time_str_len, NULL, timezone_object, 1);
zend_restore_error_handling(&error_handling);
}
/* }}} */
@@ -2681,10 +2683,12 @@ PHP_METHOD(DateTimeImmutable, __construct)
size_t time_str_len = 0;
zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, NULL, &error_handling);
- if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) {
- php_date_initialize(Z_PHPDATE_P(getThis()), time_str, time_str_len, NULL, timezone_object, 1);
+ if (FAILURE == zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) {
+ return;
}
+
+ zend_replace_error_handling(EH_THROW, NULL, &error_handling);
+ php_date_initialize(Z_PHPDATE_P(getThis()), time_str, time_str_len, NULL, timezone_object, 1);
zend_restore_error_handling(&error_handling);
}
/* }}} */
@@ -3641,11 +3645,13 @@ PHP_METHOD(DateTimeZone, __construct)
php_timezone_obj *tzobj;
zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, NULL, &error_handling);
- if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "s", &tz, &tz_len)) {
- tzobj = Z_PHPTIMEZONE_P(getThis());
- timezone_initialize(tzobj, tz);
+ if (FAILURE == zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s", &tz, &tz_len)) {
+ return;
}
+
+ zend_replace_error_handling(EH_THROW, NULL, &error_handling);
+ tzobj = Z_PHPTIMEZONE_P(getThis());
+ timezone_initialize(tzobj, tz);
zend_restore_error_handling(&error_handling);
}
/* }}} */
@@ -4070,13 +4076,15 @@ PHP_METHOD(DateInterval, __construct)
timelib_rel_time *reltime;
zend_error_handling error_handling;
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s", &interval_string, &interval_string_length) == FAILURE) {
+ return;
+ }
+
zend_replace_error_handling(EH_THROW, NULL, &error_handling);
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &interval_string, &interval_string_length) == SUCCESS) {
- if (date_interval_initialize(&reltime, interval_string, interval_string_length) == SUCCESS) {
- diobj = Z_PHPINTERVAL_P(getThis());
- diobj->diff = reltime;
- diobj->initialized = 1;
- }
+ if (date_interval_initialize(&reltime, interval_string, interval_string_length) == SUCCESS) {
+ diobj = Z_PHPINTERVAL_P(getThis());
+ diobj->diff = reltime;
+ diobj->initialized = 1;
}
zend_restore_error_handling(&error_handling);
}
diff --git a/ext/date/tests/DateTimeZone_construct_error.phpt b/ext/date/tests/DateTimeZone_construct_error.phpt
index 8ffe322176..6ff900d82f 100644
--- a/ext/date/tests/DateTimeZone_construct_error.phpt
+++ b/ext/date/tests/DateTimeZone_construct_error.phpt
@@ -15,7 +15,11 @@ echo "*** Testing DateTimeZone() : error conditions ***\n";
echo "\n-- Testing new DateTimeZone() with more than expected no. of arguments --\n";
$timezone = "GMT";
$extra_arg = 99;
-var_dump( new DateTimeZone($timezone, $extra_arg) );
+try {
+ new DateTimeZone($timezone, $extra_arg);
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
?>
===DONE===
@@ -23,10 +27,5 @@ var_dump( new DateTimeZone($timezone, $extra_arg) );
*** Testing DateTimeZone() : error conditions ***
-- Testing new DateTimeZone() with more than expected no. of arguments --
-
-Fatal error: Uncaught exception 'Exception' with message 'DateTimeZone::__construct() expects exactly 1 parameter, 2 given' in %s:%d
-Stack trace:
-#0 %s(%d): DateTimeZone->__construct('GMT', 99)
-#1 {main}
- thrown in %s on line %d
- \ No newline at end of file
+DateTimeZone::__construct() expects exactly 1 parameter, 2 given
+===DONE===
diff --git a/ext/date/tests/DateTimeZone_construct_variation1.phpt b/ext/date/tests/DateTimeZone_construct_variation1.phpt
index 025c6e2678..96f5372611 100644
--- a/ext/date/tests/DateTimeZone_construct_variation1.phpt
+++ b/ext/date/tests/DateTimeZone_construct_variation1.phpt
@@ -97,7 +97,7 @@ foreach($inputs as $variation =>$timezone) {
echo "\n-- $variation --\n";
try {
var_dump( new DateTimezone($timezone) );
- } catch(Exception $e) {
+ } catch (BaseException $e) {
$msg = $e->getMessage();
echo "FAILED: " . $msg . "\n";
}
diff --git a/ext/date/tests/DateTime_construct_error.phpt b/ext/date/tests/DateTime_construct_error.phpt
index ef79eb4554..de42566961 100644
--- a/ext/date/tests/DateTime_construct_error.phpt
+++ b/ext/date/tests/DateTime_construct_error.phpt
@@ -16,7 +16,11 @@ echo "\n-- Testing new DateTime() with more than expected no. of arguments --\n"
$time = "GMT";
$timezone = timezone_open("GMT");
$extra_arg = 99;
-var_dump( new DateTime($time, $timezone, $extra_arg) );
+try {
+ var_dump( new DateTime($time, $timezone, $extra_arg) );
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
?>
===DONE===
@@ -24,9 +28,5 @@ var_dump( new DateTime($time, $timezone, $extra_arg) );
*** Testing date_create() : error conditions ***
-- Testing new DateTime() with more than expected no. of arguments --
-
-Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() expects at most 2 parameters, 3 given' in %s:%d
-Stack trace:
-#0 %s(%d): DateTime->__construct('GMT', Object(DateTimeZone), 99)
-#1 {main}
- thrown in %s on line %d \ No newline at end of file
+DateTime::__construct() expects at most 2 parameters, 3 given
+===DONE===
diff --git a/ext/date/tests/DateTime_construct_variation1.phpt b/ext/date/tests/DateTime_construct_variation1.phpt
index f106a40935..6f149ae207 100644
--- a/ext/date/tests/DateTime_construct_variation1.phpt
+++ b/ext/date/tests/DateTime_construct_variation1.phpt
@@ -102,14 +102,14 @@ foreach($inputs as $variation =>$time) {
try {
var_dump( new DateTime($time) );
- } catch(Exception $e) {
+ } catch (BaseException $e) {
$msg = $e->getMessage();
echo "FAILED: " . $msg . "\n";
}
try {
var_dump( new DateTime($time, $timezone) );
- } catch(Exception$e) {
+ } catch (BaseException$e) {
$msg = $e->getMessage();
echo "FAILED: " . $msg . "\n";
}
diff --git a/ext/date/tests/DateTime_construct_variation2.phpt b/ext/date/tests/DateTime_construct_variation2.phpt
index e24788b066..d134d8f6cf 100644
--- a/ext/date/tests/DateTime_construct_variation2.phpt
+++ b/ext/date/tests/DateTime_construct_variation2.phpt
@@ -102,7 +102,7 @@ foreach($inputs as $variation =>$timezone) {
try {
var_dump( new DateTime($time, $timezone) );
- } catch(Exception $e) {
+ } catch (BaseException $e) {
$msg = $e->getMessage();
echo "FAILED: " . $msg . "\n";
}
diff --git a/ext/dom/attr.c b/ext/dom/attr.c
index 05bfc54232..1ecf6610b7 100644
--- a/ext/dom/attr.c
+++ b/ext/dom/attr.c
@@ -55,21 +55,17 @@ const zend_function_entry php_dom_attr_class_functions[] = {
/* {{{ proto void DOMAttr::__construct(string name, [string value]); */
PHP_METHOD(domattr, __construct)
{
- zval *id;
+ zval *id = getThis();
xmlAttrPtr nodep = NULL;
xmlNodePtr oldnode = NULL;
dom_object *intern;
char *name, *value = NULL;
size_t name_len, value_len, name_valid;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os|s", &id, dom_attr_class_entry, &name, &name_len, &value, &value_len) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s|s", &name, &name_len, &value, &value_len) == FAILURE) {
return;
}
- zend_restore_error_handling(&error_handling);
intern = Z_DOMOBJ_P(id);
name_valid = xmlValidateName((xmlChar *) name, 0);
diff --git a/ext/dom/cdatasection.c b/ext/dom/cdatasection.c
index 5bdc5ba11b..e6b7e33bce 100644
--- a/ext/dom/cdatasection.c
+++ b/ext/dom/cdatasection.c
@@ -50,20 +50,16 @@ const zend_function_entry php_dom_cdatasection_class_functions[] = {
PHP_METHOD(domcdatasection, __construct)
{
- zval *id;
+ zval *id = getThis();
xmlNodePtr nodep = NULL, oldnode = NULL;
dom_object *intern;
char *value = NULL;
size_t value_len;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &id, dom_cdatasection_class_entry, &value, &value_len) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s", &value, &value_len) == FAILURE) {
return;
}
- zend_restore_error_handling(&error_handling);
nodep = xmlNewCDataBlock(NULL, (xmlChar *) value, value_len);
if (!nodep) {
diff --git a/ext/dom/comment.c b/ext/dom/comment.c
index 01ed295e47..4dc016ae3b 100644
--- a/ext/dom/comment.c
+++ b/ext/dom/comment.c
@@ -50,20 +50,16 @@ const zend_function_entry php_dom_comment_class_functions[] = {
PHP_METHOD(domcomment, __construct)
{
- zval *id;
+ zval *id = getThis();
xmlNodePtr nodep = NULL, oldnode = NULL;
dom_object *intern;
char *value = NULL;
size_t value_len;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|s", &id, dom_comment_class_entry, &value, &value_len) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|s", &value, &value_len) == FAILURE) {
return;
}
- zend_restore_error_handling(&error_handling);
nodep = xmlNewComment((xmlChar *) value);
if (!nodep) {
diff --git a/ext/dom/document.c b/ext/dom/document.c
index bcd81c0d9b..92d5fb5d33 100644
--- a/ext/dom/document.c
+++ b/ext/dom/document.c
@@ -1253,21 +1253,17 @@ PHP_FUNCTION(dom_document_rename_node)
PHP_METHOD(domdocument, __construct)
{
- zval *id;
+ zval *id = getThis();
xmlDoc *docp = NULL, *olddoc;
dom_object *intern;
char *encoding, *version = NULL;
size_t encoding_len = 0, version_len = 0;
int refcount;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|ss", &id, dom_document_class_entry, &version, &version_len, &encoding, &encoding_len) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|ss", &version, &version_len, &encoding, &encoding_len) == FAILURE) {
return;
}
- zend_restore_error_handling(&error_handling);
docp = xmlNewDoc((xmlChar *) version);
if (!docp) {
diff --git a/ext/dom/documentfragment.c b/ext/dom/documentfragment.c
index 31d3065f50..9cf0fd5423 100644
--- a/ext/dom/documentfragment.c
+++ b/ext/dom/documentfragment.c
@@ -53,18 +53,14 @@ const zend_function_entry php_dom_documentfragment_class_functions[] = {
PHP_METHOD(domdocumentfragment, __construct)
{
- zval *id;
+ zval *id = getThis();
xmlNodePtr nodep = NULL, oldnode = NULL;
dom_object *intern;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &id, dom_documentfragment_class_entry) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "") == FAILURE) {
return;
}
- zend_restore_error_handling(&error_handling);
nodep = xmlNewDocFragment(NULL);
if (!nodep) {
diff --git a/ext/dom/element.c b/ext/dom/element.c
index b05237ff39..4af6c9accf 100644
--- a/ext/dom/element.c
+++ b/ext/dom/element.c
@@ -154,7 +154,7 @@ const zend_function_entry php_dom_element_class_functions[] = { /* {{{ */
PHP_METHOD(domelement, __construct)
{
- zval *id;
+ zval *id = getThis();
xmlNodePtr nodep = NULL, oldnode = NULL;
dom_object *intern;
char *name, *value = NULL, *uri = NULL;
@@ -163,14 +163,10 @@ PHP_METHOD(domelement, __construct)
size_t name_len, value_len = 0, uri_len = 0;
int name_valid;
xmlNsPtr nsptr = NULL;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os|s!s", &id, dom_element_class_entry, &name, &name_len, &value, &value_len, &uri, &uri_len) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s|s!s", &name, &name_len, &value, &value_len, &uri, &uri_len) == FAILURE) {
return;
}
- zend_restore_error_handling(&error_handling);
name_valid = xmlValidateName((xmlChar *) name, 0);
if (name_valid != 0) {
diff --git a/ext/dom/entityreference.c b/ext/dom/entityreference.c
index 20eff5c72d..a3e3eaea0f 100644
--- a/ext/dom/entityreference.c
+++ b/ext/dom/entityreference.c
@@ -48,22 +48,17 @@ const zend_function_entry php_dom_entityreference_class_functions[] = {
/* {{{ proto void DOMEntityReference::__construct(string name); */
PHP_METHOD(domentityreference, __construct)
{
- zval *id;
+ zval *id = getThis();
xmlNode *node;
xmlNodePtr oldnode = NULL;
dom_object *intern;
char *name;
size_t name_len, name_valid;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &id, dom_entityreference_class_entry, &name, &name_len) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s", &name, &name_len) == FAILURE) {
return;
}
- zend_restore_error_handling(&error_handling);
-
name_valid = xmlValidateName((xmlChar *) name, 0);
if (name_valid != 0) {
php_dom_throw_error(INVALID_CHARACTER_ERR, 1);
diff --git a/ext/dom/processinginstruction.c b/ext/dom/processinginstruction.c
index 7b18096fab..38b934d011 100644
--- a/ext/dom/processinginstruction.c
+++ b/ext/dom/processinginstruction.c
@@ -50,22 +50,17 @@ const zend_function_entry php_dom_processinginstruction_class_functions[] = {
/* {{{ proto void DOMProcessingInstruction::__construct(string name, [string value]); */
PHP_METHOD(domprocessinginstruction, __construct)
{
- zval *id;
+ zval *id = getThis();
xmlNodePtr nodep = NULL, oldnode = NULL;
dom_object *intern;
char *name, *value = NULL;
size_t name_len, value_len;
int name_valid;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os|s", &id, dom_processinginstruction_class_entry, &name, &name_len, &value, &value_len) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s|s", &name, &name_len, &value, &value_len) == FAILURE) {
return;
}
- zend_restore_error_handling(&error_handling);
-
name_valid = xmlValidateName((xmlChar *) name, 0);
if (name_valid != 0) {
php_dom_throw_error(INVALID_CHARACTER_ERR, 1);
diff --git a/ext/dom/tests/DOMAttr_construct_error_001.phpt b/ext/dom/tests/DOMAttr_construct_error_001.phpt
index 08734ca473..53780c3321 100644
--- a/ext/dom/tests/DOMAttr_construct_error_001.phpt
+++ b/ext/dom/tests/DOMAttr_construct_error_001.phpt
@@ -7,11 +7,11 @@ Josh Sweeney <jsweeney@alt-invest.net>
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
-$attr = new DOMAttr();
+try {
+ $attr = new DOMAttr();
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
?>
--EXPECTF--
-Fatal error: Uncaught exception 'DOMException' with message 'DOMAttr::__construct() expects at least 1 parameter, 0 given' in %s:%d
-Stack trace:
-#0 %s(%d): DOMAttr->__construct()
-#1 {main}
- thrown in %s on line %d
+DOMAttr::__construct() expects at least 1 parameter, 0 given
diff --git a/ext/dom/tests/DOMCDATASection_construct_error_001.phpt b/ext/dom/tests/DOMCDATASection_construct_error_001.phpt
index 4db2130ba8..2be1e5204f 100644
--- a/ext/dom/tests/DOMCDATASection_construct_error_001.phpt
+++ b/ext/dom/tests/DOMCDATASection_construct_error_001.phpt
@@ -7,15 +7,11 @@ Nic Rosental nicrosental@gmail.com
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
- try
- {
+ try {
$section = new DOMCDataSection();
-
- }
- catch (Exception $e)
- {
+ } catch (TypeException $e) {
echo $e->getMessage();
}
?>
--EXPECT--
-DOMCdataSection::__construct() expects exactly 1 parameter, 0 given \ No newline at end of file
+DOMCdataSection::__construct() expects exactly 1 parameter, 0 given
diff --git a/ext/dom/tests/DOMComment_construct_error_001.phpt b/ext/dom/tests/DOMComment_construct_error_001.phpt
index 89142fe6f6..e2f0b19a72 100644
--- a/ext/dom/tests/DOMComment_construct_error_001.phpt
+++ b/ext/dom/tests/DOMComment_construct_error_001.phpt
@@ -7,11 +7,11 @@ Eric Lee Stewart <ericleestewart@gmail.com>
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
-$comment = new DOMComment("comment1", "comment2");
+try {
+ $comment = new DOMComment("comment1", "comment2");
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
?>
--EXPECTF--
-Fatal error: Uncaught exception 'DOMException' with message 'DOMComment::__construct() expects at most 1 parameter, 2 given' in %s:%d
-Stack trace:
-#0 %s(%d): DOMComment->__construct('comment1', 'comment2')
-#1 {main}
- thrown in %s on line %d \ No newline at end of file
+DOMComment::__construct() expects at most 1 parameter, 2 given
diff --git a/ext/dom/tests/DOMDocumentFragment_construct_error_001.phpt b/ext/dom/tests/DOMDocumentFragment_construct_error_001.phpt
index 91173c4b7c..d9376a3251 100644
--- a/ext/dom/tests/DOMDocumentFragment_construct_error_001.phpt
+++ b/ext/dom/tests/DOMDocumentFragment_construct_error_001.phpt
@@ -7,11 +7,11 @@ Eric Lee Stewart <ericleestewart@gmail.com>
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
-$fragment = new DOMDocumentFragment("root");
+try {
+ $fragment = new DOMDocumentFragment("root");
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
?>
--EXPECTF--
-Fatal error: Uncaught exception 'DOMException' with message 'DOMDocumentFragment::__construct() expects exactly 0 parameters, 1 given' in %s:%d
-Stack trace:
-#0 %s(%d): DOMDocumentFragment->__construct('root')
-#1 {main}
- thrown in %s on line %d \ No newline at end of file
+DOMDocumentFragment::__construct() expects exactly 0 parameters, 1 given
diff --git a/ext/dom/text.c b/ext/dom/text.c
index 50e8f89f54..f857163ce1 100644
--- a/ext/dom/text.c
+++ b/ext/dom/text.c
@@ -65,20 +65,16 @@ const zend_function_entry php_dom_text_class_functions[] = {
PHP_METHOD(domtext, __construct)
{
- zval *id;
+ zval *id = getThis();
xmlNodePtr nodep = NULL, oldnode = NULL;
dom_object *intern;
char *value = NULL;
size_t value_len;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|s", &id, dom_text_class_entry, &value, &value_len) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|s", &value, &value_len) == FAILURE) {
return;
}
- zend_restore_error_handling(&error_handling);
nodep = xmlNewText((xmlChar *) value);
if (!nodep) {
diff --git a/ext/dom/xpath.c b/ext/dom/xpath.c
index 1fb6574695..58155c1aa9 100644
--- a/ext/dom/xpath.c
+++ b/ext/dom/xpath.c
@@ -253,20 +253,16 @@ static void dom_xpath_ext_function_object_php(xmlXPathParserContextPtr ctxt, int
/* {{{ proto void DOMXPath::__construct(DOMDocument doc) U */
PHP_METHOD(domxpath, __construct)
{
- zval *id, *doc;
+ zval *id = getThis(), *doc;
xmlDocPtr docp = NULL;
dom_object *docobj;
dom_xpath_object *intern;
xmlXPathContextPtr ctx, oldctx;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling);
- if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "OO", &id, dom_xpath_class_entry, &doc, dom_document_class_entry) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "O", &doc, dom_document_class_entry) == FAILURE) {
return;
}
- zend_restore_error_handling(&error_handling);
DOM_GET_OBJ(docp, doc, xmlDocPtr, docobj);
ctx = xmlXPathNewContext(docp);
diff --git a/ext/fileinfo/fileinfo.c b/ext/fileinfo/fileinfo.c
index 975a0db4c1..c4745f92fe 100644
--- a/ext/fileinfo/fileinfo.c
+++ b/ext/fileinfo/fileinfo.c
@@ -294,23 +294,17 @@ PHP_FUNCTION(finfo_open)
FILEINFO_DECLARE_INIT_OBJECT(object)
char resolved_path[MAXPATHLEN];
zend_error_handling zeh;
+ int flags = object ? ZEND_PARSE_PARAMS_THROW : 0;
- if (object) {
- zend_replace_error_handling(EH_THROW, NULL, &zeh);
- }
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|lp", &options, &file, &file_len) == FAILURE) {
- if (object) {
- zend_restore_error_handling(&zeh);
- if (!EG(exception)) {
- zend_throw_exception(NULL, "Constructor failed", 0);
- }
- }
+ if (zend_parse_parameters_ex(flags, ZEND_NUM_ARGS(), "|lp", &options, &file, &file_len) == FAILURE) {
RETURN_FALSE;
}
if (object) {
finfo_object *finfo_obj = Z_FINFO_P(object);
+ zend_replace_error_handling(EH_THROW, NULL, &zeh);
+
if (finfo_obj->ptr) {
magic_close(finfo_obj->ptr->magic);
efree(finfo_obj->ptr);
diff --git a/ext/fileinfo/tests/bug61173.phpt b/ext/fileinfo/tests/bug61173.phpt
index 838faf5b7d..4b622c65ae 100644
--- a/ext/fileinfo/tests/bug61173.phpt
+++ b/ext/fileinfo/tests/bug61173.phpt
@@ -7,11 +7,11 @@ if (!class_exists('finfo'))
--FILE--
<?php
-$finfo = new finfo(1, '', false);
-var_dump($finfo);
+try {
+ $finfo = new finfo(1, '', false);
+ var_dump($finfo);
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
--EXPECTF--
-Fatal error: Uncaught exception 'Exception' with message 'finfo::finfo() expects at most 2 parameters, 3 given' in %sbug61173.php:3
-Stack trace:
-#0 %sbug61173.php(3): finfo->finfo(1, '', false)
-#1 {main}
- thrown in %sbug61173.php on line 3
+finfo::finfo() expects at most 2 parameters, 3 given
diff --git a/ext/fileinfo/tests/finfo_open_error.phpt b/ext/fileinfo/tests/finfo_open_error.phpt
index d02be60e31..1f6f935247 100644
--- a/ext/fileinfo/tests/finfo_open_error.phpt
+++ b/ext/fileinfo/tests/finfo_open_error.phpt
@@ -20,7 +20,11 @@ var_dump( finfo_open( FILEINFO_MIME, $magicFile, 'extraArg' ) );
var_dump( finfo_open( PHP_INT_MAX - 1, $magicFile ) );
var_dump( finfo_open( 'foobar' ) );
-var_dump( new finfo('foobar') );
+try {
+ var_dump( new finfo('foobar') );
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
?>
===DONE===
@@ -45,9 +49,5 @@ resource(6) of type (file_info)
Warning: finfo_open() expects parameter 1 to be integer, string given in %sfinfo_open_error.php on line 16
bool(false)
-
-Fatal error: Uncaught exception 'Exception' with message 'finfo::finfo() expects parameter 1 to be integer, string given' in %sfinfo_open_error.php:18
-Stack trace:
-#0 %sfinfo_open_error.php(18): finfo->finfo('foobar')
-#1 {main}
- thrown in %sfinfo_open_error.php on line 18
+finfo::finfo() expects parameter 1 to be integer, string given
+===DONE===
diff --git a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp
index b43f8212d0..4dee58df2e 100644
--- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp
+++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp
@@ -32,14 +32,13 @@ static inline RuleBasedBreakIterator *fetch_rbbi(BreakIterator_object *bio) {
static void _php_intlrbbi_constructor_body(INTERNAL_FUNCTION_PARAMETERS)
{
- zval *object = getThis();
char *rules;
size_t rules_len;
zend_bool compiled = 0;
UErrorCode status = U_ZERO_ERROR;
intl_error_reset(NULL);
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|b",
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s|b",
&rules, &rules_len, &compiled) == FAILURE) {
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"rbbi_create_instance: bad arguments", 0);
diff --git a/ext/intl/calendar/gregoriancalendar_methods.cpp b/ext/intl/calendar/gregoriancalendar_methods.cpp
index d9572a0668..d970cab595 100644
--- a/ext/intl/calendar/gregoriancalendar_methods.cpp
+++ b/ext/intl/calendar/gregoriancalendar_methods.cpp
@@ -38,7 +38,8 @@ static inline GregorianCalendar *fetch_greg(Calendar_object *co) {
return (GregorianCalendar*)co->ucal;
}
-static void _php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAMETERS)
+static void _php_intlgregcal_constructor_body(
+ INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor)
{
zval *tz_object = NULL;
zval args_a[6] = {0},
@@ -48,6 +49,7 @@ static void _php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAMETERS)
zend_long largs[6];
UErrorCode status = U_ZERO_ERROR;
int variant;
+ int zpp_flags = is_constructor ? ZEND_PARSE_PARAMS_THROW : 0;
intl_error_reset(NULL);
// parameter number validation / variant determination
@@ -71,7 +73,7 @@ static void _php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAMETERS)
// argument parsing
if (variant <= 2) {
- if (zend_parse_parameters(MIN(ZEND_NUM_ARGS(), 2),
+ if (zend_parse_parameters_ex(zpp_flags, MIN(ZEND_NUM_ARGS(), 2),
"|z!s!", &tz_object, &locale, &locale_len) == FAILURE) {
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"intlgregcal_create_instance: bad arguments", 0);
@@ -79,7 +81,7 @@ static void _php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAMETERS)
return;
}
}
- if (variant > 2 && zend_parse_parameters(ZEND_NUM_ARGS(),
+ if (variant > 2 && zend_parse_parameters_ex(zpp_flags, ZEND_NUM_ARGS(),
"lll|lll", &largs[0], &largs[1], &largs[2], &largs[3], &largs[4],
&largs[5]) == FAILURE) {
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
@@ -181,7 +183,7 @@ U_CFUNC PHP_FUNCTION(intlgregcal_create_instance)
object_init_ex(return_value, GregorianCalendar_ce_ptr);
ZVAL_COPY_VALUE(&orig, return_value);
- _php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ _php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
zval_dtor(&orig);
@@ -195,8 +197,7 @@ U_CFUNC PHP_METHOD(IntlGregorianCalendar, __construct)
zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, &error_handling);
return_value = getThis();
- //changes this to IS_NULL (without first destroying) if there's an error
- _php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ _php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
if (!EG(exception)) {
zend_throw_exception(IntlException_ce_ptr, "Constructor failed", 0);
diff --git a/ext/intl/collator/collator_create.c b/ext/intl/collator/collator_create.c
index c6bc3fd209..b6ad4502db 100644
--- a/ext/intl/collator/collator_create.c
+++ b/ext/intl/collator/collator_create.c
@@ -25,17 +25,18 @@
#include "intl_data.h"
/* {{{ */
-static void collator_ctor(INTERNAL_FUNCTION_PARAMETERS)
+static void collator_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor)
{
const char* locale;
size_t locale_len = 0;
zval* object;
Collator_object* co;
+ int zpp_flags = is_constructor ? ZEND_PARSE_PARAMS_THROW : 0;
intl_error_reset( NULL );
object = return_value;
/* Parse parameters. */
- if( zend_parse_parameters( ZEND_NUM_ARGS(), "s",
+ if( zend_parse_parameters_ex( zpp_flags, ZEND_NUM_ARGS(), "s",
&locale, &locale_len ) == FAILURE )
{
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
@@ -63,7 +64,7 @@ static void collator_ctor(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION( collator_create )
{
object_init_ex( return_value, Collator_ce_ptr );
- collator_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ collator_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
}
/* }}} */
@@ -76,7 +77,7 @@ PHP_METHOD( Collator, __construct )
zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, &error_handling);
return_value = getThis();
- collator_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ collator_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
if (!EG(exception)) {
zend_throw_exception(IntlException_ce_ptr, "Constructor failed", 0);
diff --git a/ext/intl/converter/converter.c b/ext/intl/converter/converter.c
index fd3aced34d..621d0ead12 100644
--- a/ext/intl/converter/converter.c
+++ b/ext/intl/converter/converter.c
@@ -557,19 +557,10 @@ static PHP_METHOD(UConverter, __construct) {
size_t src_len = sizeof("utf-8") - 1;
char *dest = src;
size_t dest_len = src_len;
- zend_error_handling zeh;
- int rv;
intl_error_reset(NULL);
- zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, &zeh);
- rv = zend_parse_parameters(ZEND_NUM_ARGS(), "|s!s!",
- &dest, &dest_len, &src, &src_len);
- zend_restore_error_handling(&zeh);
-
- if (rv == FAILURE) {
- intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
- "UConverter::__construct(): bad arguments", 0);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|s!s!", &dest, &dest_len, &src, &src_len) == FAILURE) {
return;
}
diff --git a/ext/intl/dateformat/dateformat_create.cpp b/ext/intl/dateformat/dateformat_create.cpp
index b7ad7b5126..afc182131d 100644
--- a/ext/intl/dateformat/dateformat_create.cpp
+++ b/ext/intl/dateformat/dateformat_create.cpp
@@ -37,7 +37,7 @@ extern "C" {
#include "zend_exceptions.h"
/* {{{ */
-static void datefmt_ctor(INTERNAL_FUNCTION_PARAMETERS)
+static void datefmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor)
{
zval *object;
@@ -58,11 +58,12 @@ static void datefmt_ctor(INTERNAL_FUNCTION_PARAMETERS)
UChar* svalue = NULL; /* UTF-16 pattern_str */
int32_t slength = 0;
IntlDateFormatter_object* dfo;
+ int zpp_flags = is_constructor ? ZEND_PARSE_PARAMS_THROW : 0;
intl_error_reset(NULL);
object = return_value;
/* Parse parameters. */
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "sll|zzs",
+ if (zend_parse_parameters_ex(zpp_flags, ZEND_NUM_ARGS(), "sll|zzs",
&locale_str, &locale_len, &date_type, &time_type, &timezone_zv,
&calendar_zv, &pattern_str, &pattern_str_len) == FAILURE) {
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "datefmt_create: "
@@ -176,7 +177,7 @@ error:
U_CFUNC PHP_FUNCTION( datefmt_create )
{
object_init_ex( return_value, IntlDateFormatter_ce_ptr );
- datefmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ datefmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
RETURN_NULL();
}
@@ -194,7 +195,7 @@ U_CFUNC PHP_METHOD( IntlDateFormatter, __construct )
/* return_value param is being changed, therefore we will always return
* NULL here */
return_value = getThis();
- datefmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ datefmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
if (!EG(exception)) {
zend_throw_exception(IntlException_ce_ptr, "Constructor failed", 0);
diff --git a/ext/intl/formatter/formatter_main.c b/ext/intl/formatter/formatter_main.c
index 5d5a139688..5b7e634053 100644
--- a/ext/intl/formatter/formatter_main.c
+++ b/ext/intl/formatter/formatter_main.c
@@ -25,7 +25,7 @@
#include "intl_convert.h"
/* {{{ */
-static void numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS)
+static void numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor)
{
const char* locale;
char* pattern = NULL;
@@ -33,10 +33,11 @@ static void numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS)
zend_long style;
UChar* spattern = NULL;
int32_t spattern_len = 0;
+ int zpp_flags = is_constructor ? ZEND_PARSE_PARAMS_THROW : 0;
FORMATTER_METHOD_INIT_VARS;
/* Parse parameters. */
- if( zend_parse_parameters( ZEND_NUM_ARGS(), "sl|s",
+ if( zend_parse_parameters_ex( zpp_flags, ZEND_NUM_ARGS(), "sl|s",
&locale, &locale_len, &style, &pattern, &pattern_len ) == FAILURE )
{
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
@@ -78,7 +79,7 @@ static void numfmt_ctor(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION( numfmt_create )
{
object_init_ex( return_value, NumberFormatter_ce_ptr );
- numfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ numfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
RETURN_NULL();
}
@@ -94,7 +95,7 @@ PHP_METHOD( NumberFormatter, __construct )
zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, &error_handling);
return_value = getThis();
- numfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ numfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
if (!EG(exception)) {
zend_throw_exception(IntlException_ce_ptr, "Constructor failed", 0);
diff --git a/ext/intl/intl_error.c b/ext/intl/intl_error.c
index a946705a76..adbdd5afb8 100644
--- a/ext/intl/intl_error.c
+++ b/ext/intl/intl_error.c
@@ -101,7 +101,7 @@ void intl_error_reset( intl_error* err )
/* {{{ void intl_error_set_custom_msg( intl_error* err, char* msg, int copyMsg )
* Set last error message to msg copying it if needed.
*/
-void intl_error_set_custom_msg( intl_error* err, char* msg, int copyMsg )
+void intl_error_set_custom_msg( intl_error* err, const char* msg, int copyMsg )
{
if( !msg )
return;
@@ -122,7 +122,7 @@ void intl_error_set_custom_msg( intl_error* err, char* msg, int copyMsg )
err->free_custom_error_message = copyMsg;
/* Set user's error text message */
- err->custom_error_message = copyMsg ? estrdup( msg ) : msg;
+ err->custom_error_message = copyMsg ? estrdup( msg ) : (char *) msg;
}
/* }}} */
@@ -180,7 +180,7 @@ UErrorCode intl_error_get_code( intl_error* err )
/* {{{ void intl_error_set( intl_error* err, UErrorCode code, char* msg, int copyMsg )
* Set error code and message.
*/
-void intl_error_set( intl_error* err, UErrorCode code, char* msg, int copyMsg )
+void intl_error_set( intl_error* err, UErrorCode code, const char* msg, int copyMsg )
{
intl_error_set_code( err, code );
intl_error_set_custom_msg( err, msg, copyMsg );
@@ -190,7 +190,7 @@ void intl_error_set( intl_error* err, UErrorCode code, char* msg, int copyMsg )
/* {{{ void intl_errors_set( intl_error* err, UErrorCode code, char* msg, int copyMsg )
* Set error code and message.
*/
-void intl_errors_set( intl_error* err, UErrorCode code, char* msg, int copyMsg )
+void intl_errors_set( intl_error* err, UErrorCode code, const char* msg, int copyMsg )
{
intl_errors_set_code( err, code );
intl_errors_set_custom_msg( err, msg, copyMsg );
@@ -210,7 +210,7 @@ void intl_errors_reset( intl_error* err )
/* {{{ void intl_errors_set_custom_msg( intl_error* err, char* msg, int copyMsg )
*/
-void intl_errors_set_custom_msg( intl_error* err, char* msg, int copyMsg )
+void intl_errors_set_custom_msg( intl_error* err, const char* msg, int copyMsg )
{
if(err) {
intl_error_set_custom_msg( err, msg, copyMsg );
diff --git a/ext/intl/intl_error.h b/ext/intl/intl_error.h
index 02d62f0299..b65bb2abee 100644
--- a/ext/intl/intl_error.h
+++ b/ext/intl/intl_error.h
@@ -35,16 +35,16 @@ intl_error* intl_error_create( void );
void intl_error_init( intl_error* err );
void intl_error_reset( intl_error* err );
void intl_error_set_code( intl_error* err, UErrorCode err_code );
-void intl_error_set_custom_msg( intl_error* err, char* msg, int copyMsg );
-void intl_error_set( intl_error* err, UErrorCode code, char* msg, int copyMsg );
+void intl_error_set_custom_msg( intl_error* err, const char* msg, int copyMsg );
+void intl_error_set( intl_error* err, UErrorCode code, const char* msg, int copyMsg );
UErrorCode intl_error_get_code( intl_error* err );
zend_string* intl_error_get_message( intl_error* err );
// Wrappers to synchonize object's and global error structures.
void intl_errors_reset( intl_error* err );
-void intl_errors_set_custom_msg( intl_error* err, char* msg, int copyMsg );
+void intl_errors_set_custom_msg( intl_error* err, const char* msg, int copyMsg );
void intl_errors_set_code( intl_error* err, UErrorCode err_code );
-void intl_errors_set( intl_error* err, UErrorCode code, char* msg, int copyMsg );
+void intl_errors_set( intl_error* err, UErrorCode code, const char* msg, int copyMsg );
// Other error helpers
smart_str intl_parse_error_to_string( UParseError* pe );
diff --git a/ext/intl/msgformat/msgformat.c b/ext/intl/msgformat/msgformat.c
index 15d6ef8321..2675aca5b8 100644
--- a/ext/intl/msgformat/msgformat.c
+++ b/ext/intl/msgformat/msgformat.c
@@ -26,7 +26,7 @@
#include "intl_convert.h"
/* {{{ */
-static void msgfmt_ctor(INTERNAL_FUNCTION_PARAMETERS)
+static void msgfmt_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor)
{
const char* locale;
char* pattern;
@@ -35,11 +35,12 @@ static void msgfmt_ctor(INTERNAL_FUNCTION_PARAMETERS)
int spattern_len = 0;
zval* object;
MessageFormatter_object* mfo;
+ int zpp_flags = is_constructor ? ZEND_PARSE_PARAMS_THROW : 0;
intl_error_reset( NULL );
object = return_value;
/* Parse parameters. */
- if( zend_parse_parameters( ZEND_NUM_ARGS(), "ss",
+ if( zend_parse_parameters_ex( zpp_flags, ZEND_NUM_ARGS(), "ss",
&locale, &locale_len, &pattern, &pattern_len ) == FAILURE )
{
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
@@ -96,7 +97,7 @@ static void msgfmt_ctor(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION( msgfmt_create )
{
object_init_ex( return_value, MessageFormatter_ce_ptr );
- msgfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ msgfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
RETURN_NULL();
}
@@ -112,7 +113,7 @@ PHP_METHOD( MessageFormatter, __construct )
zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, &error_handling);
return_value = getThis();
- msgfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ msgfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
if (!EG(exception)) {
zend_throw_exception(IntlException_ce_ptr, "Constructor failed", 0);
diff --git a/ext/intl/resourcebundle/resourcebundle_class.c b/ext/intl/resourcebundle/resourcebundle_class.c
index d8d1aa0d9c..a42556f746 100644
--- a/ext/intl/resourcebundle/resourcebundle_class.c
+++ b/ext/intl/resourcebundle/resourcebundle_class.c
@@ -75,20 +75,21 @@ static zend_object *ResourceBundle_object_create( zend_class_entry *ce )
/* }}} */
/* {{{ ResourceBundle_ctor */
-static void resourcebundle_ctor(INTERNAL_FUNCTION_PARAMETERS)
+static void resourcebundle_ctor(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_constructor)
{
const char *bundlename;
size_t bundlename_len = 0;
const char *locale;
size_t locale_len = 0;
zend_bool fallback = 1;
+ int zpp_flags = is_constructor ? ZEND_PARSE_PARAMS_THROW : 0;
zval *object = return_value;
ResourceBundle_object *rb = Z_INTL_RESOURCEBUNDLE_P( object );
intl_error_reset( NULL );
- if( zend_parse_parameters( ZEND_NUM_ARGS(), "s!s!|b",
+ if( zend_parse_parameters_ex( zpp_flags, ZEND_NUM_ARGS(), "s!s!|b",
&locale, &locale_len, &bundlename, &bundlename_len, &fallback ) == FAILURE )
{
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
@@ -144,7 +145,7 @@ PHP_METHOD( ResourceBundle, __construct )
zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, &error_handling);
return_value = getThis();
- resourcebundle_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ resourcebundle_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
if (!EG(exception)) {
zend_throw_exception(IntlException_ce_ptr, "Constructor failed", 0);
@@ -160,7 +161,7 @@ proto ResourceBundle resourcebundle_create( string $locale [, string $bundlename
PHP_FUNCTION( resourcebundle_create )
{
object_init_ex( return_value, ResourceBundle_ce_ptr );
- resourcebundle_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ resourcebundle_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
RETURN_NULL();
}
diff --git a/ext/intl/spoofchecker/spoofchecker_create.c b/ext/intl/spoofchecker/spoofchecker_create.c
index d206bc81cb..865f600dfc 100644
--- a/ext/intl/spoofchecker/spoofchecker_create.c
+++ b/ext/intl/spoofchecker/spoofchecker_create.c
@@ -32,13 +32,12 @@ PHP_METHOD(Spoofchecker, __construct)
zend_error_handling error_handling;
SPOOFCHECKER_METHOD_INIT_VARS;
- zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, &error_handling);
-
- if (zend_parse_parameters_none() == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "") == FAILURE) {
return;
}
+ zend_replace_error_handling(EH_THROW, IntlException_ce_ptr, &error_handling);
+
SPOOFCHECKER_METHOD_FETCH_OBJECT_NO_CHECK;
co->uspoof = uspoof_open(SPOOFCHECKER_ERROR_CODE_P(co));
diff --git a/ext/intl/tests/breakiter___construct_error.phpt b/ext/intl/tests/breakiter___construct_error.phpt
index bea65667fa..7e67fd7403 100644
--- a/ext/intl/tests/breakiter___construct_error.phpt
+++ b/ext/intl/tests/breakiter___construct_error.phpt
@@ -19,17 +19,17 @@ try {
}
try {
var_dump(new IntlRuleBasedBreakIterator());
-} catch (IntlException $e) {
+} catch (TypeException $e) {
print_exception($e);
}
try {
var_dump(new IntlRuleBasedBreakIterator(1,2,3));
-} catch (IntlException $e) {
+} catch (TypeException $e) {
print_exception($e);
}
try {
var_dump(new IntlRuleBasedBreakIterator('[\p{Letter}\uFFFD]+;[:number:]+;', array()));
-} catch (IntlException $e) {
+} catch (TypeException $e) {
print_exception($e);
}
try {
diff --git a/ext/intl/tests/formatter_fail.phpt b/ext/intl/tests/formatter_fail.phpt
index f61cb14878..f7761173dd 100644
--- a/ext/intl/tests/formatter_fail.phpt
+++ b/ext/intl/tests/formatter_fail.phpt
@@ -12,7 +12,8 @@ function err($fmt) {
}
function print_exception($e) {
- echo "\nException: " . $e->getMessage() . " in " . $e->getFile() . " on line " . $e->getLine() . "\n";
+ echo "\n" . get_class($e) . ": " . $e->getMessage()
+ . " in " . $e->getFile() . " on line " . $e->getLine() . "\n";
}
function crt($t, $l, $s) {
@@ -20,7 +21,7 @@ function crt($t, $l, $s) {
case $t == "O":
try {
return new NumberFormatter($l, $s);
- } catch (IntlException $e) {
+ } catch (BaseException $e) {
print_exception($e);
return null;
}
@@ -44,7 +45,7 @@ $args = array(
try {
$fmt = new NumberFormatter();
-} catch (IntlException $e) {
+} catch (TypeException $e) {
print_exception($e);
$fmt = null;
}
@@ -65,7 +66,7 @@ foreach($args as $arg) {
?>
--EXPECTF--
-Exception: NumberFormatter::__construct() expects at least 2 parameters, 0 given in %s on line %d
+TypeException: NumberFormatter::__construct() expects at least 2 parameters, 0 given in %s on line %d
'numfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
Warning: numfmt_create() expects at least 2 parameters, 0 given in %s on line %d
@@ -74,12 +75,12 @@ Warning: numfmt_create() expects at least 2 parameters, 0 given in %s on line %d
Warning: NumberFormatter::create() expects at least 2 parameters, 0 given in %s on line %d
'numfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: Constructor failed in %sformatter_fail.php on line %d
+IntlException: Constructor failed in %sformatter_fail.php on line %d
'numfmt_create: number formatter creation failed: U_UNSUPPORTED_ERROR'
'numfmt_create: number formatter creation failed: U_UNSUPPORTED_ERROR'
'numfmt_create: number formatter creation failed: U_UNSUPPORTED_ERROR'
-Exception: NumberFormatter::__construct() expects parameter 1 to be string, array given in %s on line %d
+TypeException: NumberFormatter::__construct() expects parameter 1 to be string, array given in %s on line %d
'numfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
Warning: NumberFormatter::create() expects parameter 1 to be string, array given in %s on line %d
@@ -88,12 +89,12 @@ Warning: NumberFormatter::create() expects parameter 1 to be string, array given
Warning: numfmt_create() expects parameter 1 to be string, array given in %s on line %d
'numfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: Constructor failed in %sformatter_fail.php on line %d
+IntlException: Constructor failed in %sformatter_fail.php on line %d
'numfmt_create: number formatter creation failed: U_UNSUPPORTED_ERROR'
'numfmt_create: number formatter creation failed: U_UNSUPPORTED_ERROR'
'numfmt_create: number formatter creation failed: U_UNSUPPORTED_ERROR'
-Exception: Constructor failed in %sformatter_fail.php on line %d
+IntlException: Constructor failed in %sformatter_fail.php on line %d
'numfmt_create: number formatter creation failed: U_MEMORY_ALLOCATION_ERROR'
'numfmt_create: number formatter creation failed: U_MEMORY_ALLOCATION_ERROR'
'numfmt_create: number formatter creation failed: U_MEMORY_ALLOCATION_ERROR'
diff --git a/ext/intl/tests/gregoriancalendar___construct_error.phpt b/ext/intl/tests/gregoriancalendar___construct_error.phpt
index d81809793e..7383bdee88 100644
--- a/ext/intl/tests/gregoriancalendar___construct_error.phpt
+++ b/ext/intl/tests/gregoriancalendar___construct_error.phpt
@@ -22,7 +22,7 @@ try {
}
try {
var_dump(new IntlGregorianCalendar(1,2,3,4,NULL,array()));
-} catch (IntlException $e) {
+} catch (TypeException $e) {
print_exception($e);
}
--EXPECTF--
diff --git a/ext/intl/tests/msgfmt_fail.phpt b/ext/intl/tests/msgfmt_fail.phpt
index 7c76598c0d..d7ca83d442 100644
--- a/ext/intl/tests/msgfmt_fail.phpt
+++ b/ext/intl/tests/msgfmt_fail.phpt
@@ -13,7 +13,8 @@ function err($fmt) {
}
function print_exception($e) {
- echo "\nException: " . $e->getMessage() . " in " . $e->getFile() . " on line " . $e->getLine() . "\n";
+ echo "\n" . get_class($e) . ": " . $e->getMessage()
+ . " in " . $e->getFile() . " on line " . $e->getLine() . "\n";
}
function crt($t, $l, $s) {
@@ -21,7 +22,7 @@ function crt($t, $l, $s) {
case $t == "O":
try {
return new MessageFormatter($l, $s);
- } catch (IntlException $e) {
+ } catch (BaseException $e) {
print_exception($e);
return null;
}
@@ -46,7 +47,7 @@ $args = array(
try {
$fmt = new MessageFormatter();
-} catch (IntlException $e) {
+} catch (TypeException $e) {
print_exception($e);
$fmt = null;
}
@@ -57,7 +58,7 @@ $fmt = MessageFormatter::create();
err($fmt);
try {
$fmt = new MessageFormatter('en');
-} catch (IntlException $e) {
+} catch (TypeException $e) {
print_exception($e);
$fmt = null;
}
@@ -78,7 +79,7 @@ foreach($args as $arg) {
?>
--EXPECTF--
-Exception: MessageFormatter::__construct() expects exactly 2 parameters, 0 given in %s on line %d
+TypeException: MessageFormatter::__construct() expects exactly 2 parameters, 0 given in %s on line %d
'msgfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
Warning: msgfmt_create() expects exactly 2 parameters, 0 given in %s on line %d
@@ -87,7 +88,7 @@ Warning: msgfmt_create() expects exactly 2 parameters, 0 given in %s on line %d
Warning: MessageFormatter::create() expects exactly 2 parameters, 0 given in %s on line %d
'msgfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: MessageFormatter::__construct() expects exactly 2 parameters, 1 given in %s on line %d
+TypeException: MessageFormatter::__construct() expects exactly 2 parameters, 1 given in %s on line %d
'msgfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
Warning: msgfmt_create() expects exactly 2 parameters, 1 given in %s on line %d
@@ -96,17 +97,17 @@ Warning: msgfmt_create() expects exactly 2 parameters, 1 given in %s on line %d
Warning: MessageFormatter::create() expects exactly 2 parameters, 1 given in %s on line %d
'msgfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: Constructor failed in %smsgfmt_fail2.php on line %d
+IntlException: Constructor failed in %smsgfmt_fail2.php on line %d
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: Constructor failed in %smsgfmt_fail2.php on line %d
+IntlException: Constructor failed in %smsgfmt_fail2.php on line %d
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: MessageFormatter::__construct() expects parameter 1 to be string, array given in %s on line %d
+TypeException: MessageFormatter::__construct() expects parameter 1 to be string, array given in %s on line %d
'msgfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
Warning: MessageFormatter::create() expects parameter 1 to be string, array given in %s on line %d
@@ -115,17 +116,17 @@ Warning: MessageFormatter::create() expects parameter 1 to be string, array give
Warning: msgfmt_create() expects parameter 1 to be string, array given in %s on line %d
'msgfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: Constructor failed in %smsgfmt_fail2.php on line %d
+IntlException: Constructor failed in %smsgfmt_fail2.php on line %d
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: Constructor failed in %smsgfmt_fail2.php on line %d
+IntlException: Constructor failed in %smsgfmt_fail2.php on line %d
'msgfmt_create: message formatter creation failed: U_UNMATCHED_BRACES'
'msgfmt_create: message formatter creation failed: U_UNMATCHED_BRACES'
'msgfmt_create: message formatter creation failed: U_UNMATCHED_BRACES'
-Exception: Constructor failed in %smsgfmt_fail2.php on line %d
+IntlException: Constructor failed in %smsgfmt_fail2.php on line %d
'msgfmt_create: error converting pattern to UTF-16: U_INVALID_CHAR_FOUND'
'msgfmt_create: error converting pattern to UTF-16: U_INVALID_CHAR_FOUND'
'msgfmt_create: error converting pattern to UTF-16: U_INVALID_CHAR_FOUND'
diff --git a/ext/intl/tests/msgfmt_fail2.phpt b/ext/intl/tests/msgfmt_fail2.phpt
index 0ab99cf633..6e34bfde68 100644
--- a/ext/intl/tests/msgfmt_fail2.phpt
+++ b/ext/intl/tests/msgfmt_fail2.phpt
@@ -13,7 +13,8 @@ function err($fmt) {
}
function print_exception($e) {
- echo "\nException: " . $e->getMessage() . " in " . $e->getFile() . " on line " . $e->getLine() . "\n";
+ echo "\n" . get_class($e) . ": " . $e->getMessage()
+ . " in " . $e->getFile() . " on line " . $e->getLine() . "\n";
}
function crt($t, $l, $s) {
@@ -21,7 +22,7 @@ function crt($t, $l, $s) {
case $t == "O":
try {
return new MessageFormatter($l, $s);
- } catch (IntlException $e) {
+ } catch (BaseException $e) {
print_exception($e);
return null;
}
@@ -46,7 +47,7 @@ $args = array(
try {
$fmt = new MessageFormatter();
-} catch (IntlException $e) {
+} catch (TypeException $e) {
print_exception($e);
$fmt = null;
}
@@ -57,7 +58,7 @@ $fmt = MessageFormatter::create();
err($fmt);
try {
$fmt = new MessageFormatter('en');
-} catch (IntlException $e) {
+} catch (TypeException $e) {
print_exception($e);
$fmt = null;
}
@@ -78,7 +79,7 @@ foreach($args as $arg) {
?>
--EXPECTF--
-Exception: MessageFormatter::__construct() expects exactly 2 parameters, 0 given in %s on line %d
+TypeException: MessageFormatter::__construct() expects exactly 2 parameters, 0 given in %s on line %d
'msgfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
Warning: msgfmt_create() expects exactly 2 parameters, 0 given in %s on line %d
@@ -87,7 +88,7 @@ Warning: msgfmt_create() expects exactly 2 parameters, 0 given in %s on line %d
Warning: MessageFormatter::create() expects exactly 2 parameters, 0 given in %s on line %d
'msgfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: MessageFormatter::__construct() expects exactly 2 parameters, 1 given in %s on line %d
+TypeException: MessageFormatter::__construct() expects exactly 2 parameters, 1 given in %s on line %d
'msgfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
Warning: msgfmt_create() expects exactly 2 parameters, 1 given in %s on line %d
@@ -96,17 +97,17 @@ Warning: msgfmt_create() expects exactly 2 parameters, 1 given in %s on line %d
Warning: MessageFormatter::create() expects exactly 2 parameters, 1 given in %s on line %d
'msgfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: Constructor failed in %smsgfmt_fail2.php on line %d
+IntlException: Constructor failed in %smsgfmt_fail2.php on line %d
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: Constructor failed in %smsgfmt_fail2.php on line %d
+IntlException: Constructor failed in %smsgfmt_fail2.php on line %d
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
'msgfmt_create: message formatter creation failed: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: MessageFormatter::__construct() expects parameter 1 to be string, array given in %s on line %d
+TypeException: MessageFormatter::__construct() expects parameter 1 to be string, array given in %s on line %d
'msgfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
Warning: MessageFormatter::create() expects parameter 1 to be string, array given in %s on line %d
@@ -115,17 +116,17 @@ Warning: MessageFormatter::create() expects parameter 1 to be string, array give
Warning: msgfmt_create() expects parameter 1 to be string, array given in %s on line %d
'msgfmt_create: unable to parse input parameters: U_ILLEGAL_ARGUMENT_ERROR'
-Exception: Constructor failed in %smsgfmt_fail2.php on line %d
+IntlException: Constructor failed in %smsgfmt_fail2.php on line %d
'msgfmt_create: message formatter creation failed: U_PATTERN_SYNTAX_ERROR'
'msgfmt_create: message formatter creation failed: U_PATTERN_SYNTAX_ERROR'
'msgfmt_create: message formatter creation failed: U_PATTERN_SYNTAX_ERROR'
-Exception: Constructor failed in %smsgfmt_fail2.php on line %d
+IntlException: Constructor failed in %smsgfmt_fail2.php on line %d
'msgfmt_create: message formatter creation failed: U_UNMATCHED_BRACES'
'msgfmt_create: message formatter creation failed: U_UNMATCHED_BRACES'
'msgfmt_create: message formatter creation failed: U_UNMATCHED_BRACES'
-Exception: Constructor failed in %smsgfmt_fail2.php on line %d
+IntlException: Constructor failed in %smsgfmt_fail2.php on line %d
'msgfmt_create: error converting pattern to UTF-16: U_INVALID_CHAR_FOUND'
'msgfmt_create: error converting pattern to UTF-16: U_INVALID_CHAR_FOUND'
'msgfmt_create: error converting pattern to UTF-16: U_INVALID_CHAR_FOUND'
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
index 47cba0edb9..f3df485404 100644
--- a/ext/pdo/pdo_dbh.c
+++ b/ext/pdo/pdo_dbh.c
@@ -210,13 +210,11 @@ static PHP_METHOD(PDO, dbh_constructor)
int call_factory = 1;
zend_error_handling zeh;
- zend_replace_error_handling(EH_THROW, pdo_exception_ce, &zeh);
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS(), "s|s!s!a!", &data_source, &data_source_len,
+ if (FAILURE == zend_parse_parameters_throw(ZEND_NUM_ARGS(),
+ "s|s!s!a!", &data_source, &data_source_len,
&username, &usernamelen, &password, &passwordlen, &options)) {
- zend_restore_error_handling(&zeh);
return;
}
- zend_restore_error_handling(&zeh);
/* parse the data source name */
colon = strchr(data_source, ':');
diff --git a/ext/pdo_mysql/tests/pdo_mysql___construct.phpt b/ext/pdo_mysql/tests/pdo_mysql___construct.phpt
index 2a890c963d..f0048ff305 100644
--- a/ext/pdo_mysql/tests/pdo_mysql___construct.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql___construct.phpt
@@ -31,7 +31,7 @@ MySQLPDOTest::skip();
try {
if (NULL !== ($db = @new PDO()))
printf("[001] Too few parameters\n");
- } catch (Exception $ex) {
+ } catch (TypeException $ex) {
}
print tryandcatch(2, '$db = new PDO(chr(0));');
diff --git a/ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt b/ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt
index 5166958d24..9a64f59fe2 100644
--- a/ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt
@@ -70,7 +70,7 @@ MySQLPDOTest::skip();
try {
if (NULL !== ($db = @new PDO($dsn, $user, $pass, 'wrong type')))
printf("[001] Expecting NULL got %s/%s\n", gettype($db), $db);
- } catch (Exception $e) {
+ } catch (TypeException $e) {
}
if (!is_object($db = new PDO($dsn, $user, $pass, array())))
diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
index 861f94e763..8ef5b0f7ed 100644
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c
@@ -1130,26 +1130,17 @@ PHP_METHOD(Phar, __construct)
phar_archive_object *phar_obj;
phar_archive_data *phar_data;
zval *zobj = getThis(), arg1, arg2;
- zend_error_handling zeh;
- int rv;
phar_obj = (phar_archive_object*)((char*)Z_OBJ_P(zobj) - Z_OBJ_P(zobj)->handlers->offset);
is_data = instanceof_function(Z_OBJCE_P(zobj), phar_ce_data);
if (is_data) {
- zend_replace_error_handling(EH_THROW, phar_ce_PharException, &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS(), "s|ls!l", &fname, &fname_len, &flags, &alias, &alias_len, &format);
- zend_restore_error_handling(&zeh TSRMLS_CC);
- if (rv == FAILURE) {
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s|ls!l", &fname, &fname_len, &flags, &alias, &alias_len, &format) == FAILURE) {
return;
}
} else {
- zend_replace_error_handling(EH_THROW, phar_ce_PharException, &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS(), "s|ls!", &fname, &fname_len, &flags, &alias, &alias_len);
- zend_restore_error_handling(&zeh TSRMLS_CC);
- if (rv == FAILURE) {
- /* Exception was thrown already */
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s|ls!", &fname, &fname_len, &flags, &alias, &alias_len) == FAILURE) {
return;
}
}
@@ -4359,14 +4350,8 @@ PHP_METHOD(PharFileInfo, __construct)
phar_entry_info *entry_info;
phar_archive_data *phar_data;
zval *zobj = getThis(), arg1;
- zend_error_handling zeh;
- int rv;
- zend_replace_error_handling(EH_THROW, phar_ce_PharException, &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS(), "s", &fname, &fname_len);
- zend_restore_error_handling(&zeh TSRMLS_CC);
-
- if (rv == FAILURE) {
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s", &fname, &fname_len) == FAILURE) {
return;
}
diff --git a/ext/phar/tests/badparameters.phpt b/ext/phar/tests/badparameters.phpt
index 7d5525b887..97faab427c 100644
--- a/ext/phar/tests/badparameters.phpt
+++ b/ext/phar/tests/badparameters.phpt
@@ -18,7 +18,7 @@ Phar::loadPhar(array());
Phar::canCompress('hi');
try {
$a = new Phar(array());
-} catch (PharException $e) {
+} catch (TypeException $e) {
print_exception($e);
}
try {
diff --git a/ext/phar/tests/bug60261.phpt b/ext/phar/tests/bug60261.phpt
index c27ff5b554..2dd03b9517 100644
--- a/ext/phar/tests/bug60261.phpt
+++ b/ext/phar/tests/bug60261.phpt
@@ -5,17 +5,13 @@ Bug #60261 (phar dos null pointer)
--FILE--
<?php
-$nx = new Phar();
try {
+ $nx = new Phar();
$nx->getLinkTarget();
-} catch (Exception $e) {
+} catch (TypeException $e) {
echo $e->getMessage(), "\n";
}
?>
--EXPECTF--
-Fatal error: Uncaught exception 'PharException' with message 'Phar::__construct() expects at least 1 parameter, 0 given' in %sbug60261.php:3
-Stack trace:
-#0 %sbug60261.php(3): Phar->__construct()
-#1 {main}
- thrown in %sbug60261.php on line 3
+Phar::__construct() expects at least 1 parameter, 0 given
diff --git a/ext/phar/tests/pharfileinfo_construct.phpt b/ext/phar/tests/pharfileinfo_construct.phpt
index df00161d55..abd0fac2e6 100644
--- a/ext/phar/tests/pharfileinfo_construct.phpt
+++ b/ext/phar/tests/pharfileinfo_construct.phpt
@@ -17,7 +17,11 @@ echo $e->getMessage() . "\n";
unlink($fname);
}
+try {
$a = new PharFileInfo(array());
+} catch (TypeException $e) {
+echo $e->getMessage() . "\n";
+}
$a = new Phar($fname);
$a['a'] = 'hi';
@@ -46,9 +50,8 @@ echo $e->getMessage() . "\n";
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar'); ?>
--EXPECTF--
Cannot open phar file 'phar://%spharfileinfo_construct.phar/oops': internal corruption of phar "%spharfileinfo_construct.phar" (truncated entry)
-
-Fatal error: Uncaught exception 'PharException' with message 'PharFileInfo::__construct() expects parameter 1 to be string, array given' in %spharfileinfo_construct.php:13
-Stack trace:
-#0 %spharfileinfo_construct.php(13): PharFileInfo->__construct(Array)
-#1 {main}
- thrown in %spharfileinfo_construct.php on line 13
+PharFileInfo::__construct() expects parameter 1 to be string, array given
+Cannot access phar file entry '%s' in archive '%s'
+Cannot call constructor twice
+'%s' is not a valid phar archive URL (must have at least phar://filename.phar)
+===DONE===
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index b4dd978f08..da208f6c4b 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -1572,13 +1572,11 @@ ZEND_METHOD(reflection_function, __construct)
zval name;
zval *object;
zval *closure = NULL;
- char *lcname;
+ char *lcname, *nsname;
reflection_object *intern;
zend_function *fptr;
char *name_str;
size_t name_len;
- int rv;
- zend_error_handling zeh;
object = getThis();
intern = Z_REFLECTION_P(object);
@@ -1590,31 +1588,26 @@ ZEND_METHOD(reflection_function, __construct)
fptr = (zend_function*)zend_get_closure_method_def(closure);
Z_ADDREF_P(closure);
} else {
- zend_replace_error_handling(EH_THROW, reflection_exception_ptr, &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name_str, &name_len);
- zend_restore_error_handling(&zeh TSRMLS_CC);
- if (rv == SUCCESS) {
- char *nsname;
- lcname = zend_str_tolower_dup(name_str, name_len);
-
- /* Ignore leading "\" */
- nsname = lcname;
- if (lcname[0] == '\\') {
- nsname = &lcname[1];
- name_len--;
- }
-
- if ((fptr = zend_hash_str_find_ptr(EG(function_table), nsname, name_len)) == NULL) {
- efree(lcname);
- zend_throw_exception_ex(reflection_exception_ptr, 0,
- "Function %s() does not exist", name_str);
- return;
- }
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s", &name_str, &name_len) == FAILURE) {
+ return;
+ }
+
+ lcname = zend_str_tolower_dup(name_str, name_len);
+
+ /* Ignore leading "\" */
+ nsname = lcname;
+ if (lcname[0] == '\\') {
+ nsname = &lcname[1];
+ name_len--;
+ }
+
+ if ((fptr = zend_hash_str_find_ptr(EG(function_table), nsname, name_len)) == NULL) {
efree(lcname);
- } else {
- /* Exception has been thrown. */
+ zend_throw_exception_ex(reflection_exception_ptr, 0,
+ "Function %s() does not exist", name_str);
return;
}
+ efree(lcname);
}
ZVAL_STR_COPY(&name, fptr->common.function_name);
@@ -2141,14 +2134,10 @@ ZEND_METHOD(reflection_parameter, __construct)
zend_class_entry *ce = NULL;
zend_bool is_closure = 0;
zend_bool is_invoke = 0;
- zend_error_handling zeh;
- zend_replace_error_handling(EH_THROW, reflection_exception_ptr, &zeh TSRMLS_CC);
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "zz", &reference, &parameter) == FAILURE) {
- zend_restore_error_handling(&zeh TSRMLS_CC);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "zz", &reference, &parameter) == FAILURE) {
return;
}
- zend_restore_error_handling(&zeh TSRMLS_CC);
object = getThis();
intern = Z_REFLECTION_P(object);
@@ -2729,17 +2718,13 @@ ZEND_METHOD(reflection_method, __construct)
zval ztmp;
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "zs", &classname, &name_str, &name_len) == FAILURE) {
- zend_error_handling zeh;
- int rv;
-
- zend_replace_error_handling(EH_THROW, reflection_exception_ptr, &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name_str, &name_len);
- zend_restore_error_handling(&zeh TSRMLS_CC);
- if (rv == FAILURE) {
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s", &name_str, &name_len) == FAILURE) {
return;
}
+
if ((tmp = strstr(name_str, "::")) == NULL) {
- zend_throw_exception_ex(reflection_exception_ptr, 0, "Invalid method name %s", name_str);
+ zend_throw_exception_ex(reflection_exception_ptr, 0,
+ "Invalid method name %s", name_str);
return;
}
classname = &ztmp;
@@ -4833,14 +4818,7 @@ ZEND_METHOD(reflection_property, __construct)
zend_property_info *property_info = NULL;
property_reference *reference;
- int rv;
- zend_error_handling zeh;
-
- zend_replace_error_handling(EH_THROW, reflection_exception_ptr, &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS(), "zs", &classname, &name_str, &name_len);
- zend_restore_error_handling(&zeh TSRMLS_CC);
-
- if (rv == FAILURE) {
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "zs", &classname, &name_str, &name_len) == FAILURE) {
return;
}
@@ -5239,15 +5217,9 @@ ZEND_METHOD(reflection_extension, __construct)
zend_module_entry *module;
char *name_str;
size_t name_len;
- int rv;
- zend_error_handling zeh;
ALLOCA_FLAG(use_heap)
- zend_replace_error_handling(EH_THROW, reflection_exception_ptr, &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name_str, &name_len);
- zend_restore_error_handling(&zeh TSRMLS_CC);
-
- if (rv == FAILURE) {
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s", &name_str, &name_len) == FAILURE) {
return;
}
@@ -5614,14 +5586,8 @@ ZEND_METHOD(reflection_zend_extension, __construct)
zend_extension *extension;
char *name_str;
size_t name_len;
- int rv;
- zend_error_handling zeh;
-
- zend_replace_error_handling(EH_THROW, reflection_exception_ptr, &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name_str, &name_len);
- zend_restore_error_handling(&zeh TSRMLS_CC);
- if (rv == FAILURE) {
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s", &name_str, &name_len) == FAILURE) {
return;
}
diff --git a/ext/reflection/tests/ReflectionExtension_constructor_error.phpt b/ext/reflection/tests/ReflectionExtension_constructor_error.phpt
index f731ab51cc..235c2ad768 100644
--- a/ext/reflection/tests/ReflectionExtension_constructor_error.phpt
+++ b/ext/reflection/tests/ReflectionExtension_constructor_error.phpt
@@ -7,22 +7,19 @@ Leon Luijkx <leon@phpgg.nl>
<?php
try {
$obj = new ReflectionExtension();
-}
-catch(ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
try {
$obj = new ReflectionExtension('foo', 'bar');
-}
-catch(ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
try {
$obj = new ReflectionExtension([]);
-}
-catch(ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
diff --git a/ext/reflection/tests/ReflectionFunction_construct.001.phpt b/ext/reflection/tests/ReflectionFunction_construct.001.phpt
index 90259ac997..52db7c654d 100644
--- a/ext/reflection/tests/ReflectionFunction_construct.001.phpt
+++ b/ext/reflection/tests/ReflectionFunction_construct.001.phpt
@@ -9,31 +9,27 @@ Steve Seear <stevseea@php.net>
try {
$a = new ReflectionFunction(array(1, 2, 3));
echo "exception not thrown.".PHP_EOL;
-}
-catch(ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
try {
$a = new ReflectionFunction('nonExistentFunction');
-} catch (Exception $e) {
+} catch (ReflectionException $e) {
echo $e->getMessage().PHP_EOL;
}
try {
$a = new ReflectionFunction();
-}
-catch(ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
try {
$a = new ReflectionFunction(1, 2);
-}
-catch(ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
try {
$a = new ReflectionFunction([]);
-}
-catch(ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
diff --git a/ext/reflection/tests/ReflectionMethod_006.phpt b/ext/reflection/tests/ReflectionMethod_006.phpt
index 0b8228989c..b22a2acc6d 100644
--- a/ext/reflection/tests/ReflectionMethod_006.phpt
+++ b/ext/reflection/tests/ReflectionMethod_006.phpt
@@ -8,14 +8,12 @@ Steve Seear <stevseea@php.net>
try {
new ReflectionMethod();
-}
-catch(ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
try {
new ReflectionMethod('a', 'b', 'c');
-}
-catch(ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
diff --git a/ext/reflection/tests/ReflectionMethod_constructor_error2.phpt b/ext/reflection/tests/ReflectionMethod_constructor_error2.phpt
index 85f8097825..3c521efc64 100644
--- a/ext/reflection/tests/ReflectionMethod_constructor_error2.phpt
+++ b/ext/reflection/tests/ReflectionMethod_constructor_error2.phpt
@@ -16,13 +16,13 @@ class TestClass
try {
echo "Too few arguments:\n";
$methodInfo = new ReflectionMethod();
-} catch (ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
try {
echo "\nToo many arguments:\n";
$methodInfo = new ReflectionMethod("TestClass", "foo", true);
-} catch (ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
@@ -45,7 +45,7 @@ try {
try{
//invalid 2nd param
$methodInfo = new ReflectionMethod("TestClass", []);
-} catch (ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
diff --git a/ext/reflection/tests/ReflectionParameter_invalidMethodInConstructor.phpt b/ext/reflection/tests/ReflectionParameter_invalidMethodInConstructor.phpt
index 1775dee514..a884162fd2 100644
--- a/ext/reflection/tests/ReflectionParameter_invalidMethodInConstructor.phpt
+++ b/ext/reflection/tests/ReflectionParameter_invalidMethodInConstructor.phpt
@@ -25,7 +25,7 @@ class C {
try {
new ReflectionParameter(array ('A', 'b'));
}
-catch(ReflectionException $e) {
+catch(TypeException $e) {
printf( "Ok - %s\n", $e->getMessage());
}
diff --git a/ext/reflection/tests/ReflectionProperty_error.phpt b/ext/reflection/tests/ReflectionProperty_error.phpt
index d3910296b5..ef051b5380 100644
--- a/ext/reflection/tests/ReflectionProperty_error.phpt
+++ b/ext/reflection/tests/ReflectionProperty_error.phpt
@@ -9,21 +9,18 @@ class C {
try {
new ReflectionProperty();
-}
-catch(ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
try {
new ReflectionProperty('C::p');
-}
-catch(ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
try {
new ReflectionProperty('C', 'p', 'x');
-}
-catch(ReflectionException $re) {
+} catch (TypeException $re) {
echo "Ok - ".$re->getMessage().PHP_EOL;
}
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index ee21bbfbeb..abfeb158cd 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -2184,16 +2184,11 @@ SXE_METHOD(__construct)
xmlDocPtr docp;
zend_long options = 0;
zend_bool is_url = 0, isprefix = 0;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, NULL, &error_handling);
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|lbsb", &data, &data_len, &options, &is_url, &ns, &ns_len, &isprefix) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s|lbsb", &data, &data_len, &options, &is_url, &ns, &ns_len, &isprefix) == FAILURE) {
return;
}
- zend_restore_error_handling(&error_handling);
-
docp = is_url ? xmlReadFile(data, NULL, options) : xmlReadMemory(data, data_len, NULL, NULL, options);
if (!docp) {
diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c
index 8e89c4d4f9..5f34ac4fcb 100644
--- a/ext/snmp/snmp.c
+++ b/ext/snmp/snmp.c
@@ -1807,19 +1807,14 @@ PHP_METHOD(snmp, __construct)
zend_long retries = SNMP_DEFAULT_RETRIES;
zend_long version = SNMP_DEFAULT_VERSION;
int argc = ZEND_NUM_ARGS();
- zend_error_handling error_handling;
snmp_object = Z_SNMP_P(object);
- zend_replace_error_handling(EH_THROW, NULL, &error_handling);
- if (zend_parse_parameters(argc, "lss|ll", &version, &a1, &a1_len, &a2, &a2_len, &timeout, &retries) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(argc, "lss|ll", &version, &a1, &a1_len, &a2, &a2_len, &timeout, &retries) == FAILURE) {
return;
}
- zend_restore_error_handling(&error_handling);
-
- switch(version) {
+ switch (version) {
case SNMP_VERSION_1:
case SNMP_VERSION_2c:
case SNMP_VERSION_3:
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index 5e62bad6e4..a919d4bb5e 100644
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -1220,21 +1220,17 @@ SPL_METHOD(Array, __construct)
zval *array;
zend_long ar_flags = 0;
zend_class_entry *ce_get_iterator = spl_ce_Iterator;
- zend_error_handling error_handling;
if (ZEND_NUM_ARGS() == 0) {
return; /* nothing to do */
}
- zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling);
-
- intern = Z_SPLARRAY_P(object);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|lC", &array, &ar_flags, &ce_get_iterator) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "z|lC", &array, &ar_flags, &ce_get_iterator) == FAILURE) {
return;
}
+ intern = Z_SPLARRAY_P(object);
+
if (ZEND_NUM_ARGS() > 2) {
intern->ce_get_iterator = ce_get_iterator;
}
@@ -1242,9 +1238,6 @@ SPL_METHOD(Array, __construct)
ar_flags &= ~SPL_ARRAY_INT_MASK;
spl_array_set_array(object, intern, array, ar_flags, ZEND_NUM_ARGS() == 1);
-
- zend_restore_error_handling(&error_handling);
-
}
/* }}} */
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index b91e8b0558..3e250b1acc 100644
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -1102,11 +1102,7 @@ SPL_METHOD(DirectoryIterator, isDot)
/* {{{ proto void SplFileInfo::__construct(string file_name)
Cronstructs a new SplFileInfo from a path. */
-/* zend_replace_error_handling() is used to throw exceptions in case
- the constructor fails. Here we use this to ensure the object
- has a valid directory resource.
-
- When the constructor gets called the object is already created
+/* When the constructor gets called the object is already created
by the engine, so we must only call 'additional' initializations.
*/
SPL_METHOD(SplFileInfo, __construct)
@@ -1114,12 +1110,8 @@ SPL_METHOD(SplFileInfo, __construct)
spl_filesystem_object *intern;
char *path;
size_t len;
- zend_error_handling error_handling;
-
- zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, &error_handling);
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &path, &len) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "s", &path, &len) == FAILURE) {
return;
}
@@ -1127,8 +1119,6 @@ SPL_METHOD(SplFileInfo, __construct)
spl_filesystem_info_set_filename(intern, path, len, 1);
- zend_restore_error_handling(&error_handling);
-
/* intern->type = SPL_FS_INFO; already set */
}
/* }}} */
@@ -2272,18 +2262,15 @@ SPL_METHOD(SplFileObject, __construct)
size_t tmp_path_len;
zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, &error_handling);
-
intern->u.file.open_mode = NULL;
intern->u.file.open_mode_len = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|sbr!",
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "p|sbr!",
&intern->file_name, &intern->file_name_len,
&intern->u.file.open_mode, &intern->u.file.open_mode_len,
&use_include_path, &intern->u.file.zcontext) == FAILURE) {
intern->u.file.open_mode = NULL;
intern->file_name = NULL;
- zend_restore_error_handling(&error_handling);
return;
}
@@ -2292,6 +2279,8 @@ SPL_METHOD(SplFileObject, __construct)
intern->u.file.open_mode_len = 1;
}
+ zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, &error_handling);
+
if (spl_filesystem_file_open(intern, use_include_path, 0) == SUCCESS) {
tmp_path_len = strlen(intern->u.file.stream->orig_path);
@@ -2331,10 +2320,7 @@ SPL_METHOD(SplTempFileObject, __construct)
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(getThis());
zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, &error_handling);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &max_memory) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|l", &max_memory) == FAILURE) {
return;
}
@@ -2351,6 +2337,7 @@ SPL_METHOD(SplTempFileObject, __construct)
intern->u.file.open_mode = "wb";
intern->u.file.open_mode_len = 1;
+ zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, &error_handling);
if (spl_filesystem_file_open(intern, 0, 0) == SUCCESS) {
intern->_path_len = 0;
intern->_path = estrndup("", 0);
diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c
index 9dbfa61344..48e9d2f85f 100644
--- a/ext/spl/spl_fixedarray.c
+++ b/ext/spl/spl_fixedarray.c
@@ -561,14 +561,7 @@ SPL_METHOD(SplFixedArray, __construct)
spl_fixedarray_object *intern;
zend_long size = 0;
- int rv;
- zend_error_handling zeh;
-
- zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &zeh TSRMLS_CC);
- rv = zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &size);
- zend_restore_error_handling(&zeh TSRMLS_CC);
-
- if (rv == FAILURE) {
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|l", &size) == FAILURE) {
return;
}
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index 3ffb8f7bec..e2267cfdcd 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -1067,6 +1067,8 @@ static void spl_recursive_tree_iterator_get_entry(spl_recursive_it_object *objec
data = iterator->funcs->get_current_data(iterator);
+ /* Replace exception handling so the catchable fatal error that is thrown when a class
+ * without __toString is converted to string is converted into an exception. */
zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, &error_handling);
if (data) {
RETVAL_ZVAL(data, 1, 0);
@@ -1459,25 +1461,20 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
return NULL;
}
- zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling);
-
intern->dit_type = dit_type;
switch (dit_type) {
case DIT_LimitIterator: {
intern->u.limit.offset = 0; /* start at beginning */
intern->u.limit.count = -1; /* get all */
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|ll", &zobject, ce_inner, &intern->u.limit.offset, &intern->u.limit.count) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "O|ll", &zobject, ce_inner, &intern->u.limit.offset, &intern->u.limit.count) == FAILURE) {
return NULL;
}
if (intern->u.limit.offset < 0) {
zend_throw_exception(spl_ce_OutOfRangeException, "Parameter offset must be >= 0", 0);
- zend_restore_error_handling(&error_handling);
return NULL;
}
if (intern->u.limit.count < 0 && intern->u.limit.count != -1) {
zend_throw_exception(spl_ce_OutOfRangeException, "Parameter count must either be -1 or a value greater than or equal 0", 0);
- zend_restore_error_handling(&error_handling);
return NULL;
}
break;
@@ -1485,13 +1482,11 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
case DIT_CachingIterator:
case DIT_RecursiveCachingIterator: {
zend_long flags = CIT_CALL_TOSTRING;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|l", &zobject, ce_inner, &flags) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "O|l", &zobject, ce_inner, &flags) == FAILURE) {
return NULL;
}
if (spl_cit_check_flags(flags) != SUCCESS) {
zend_throw_exception(spl_ce_InvalidArgumentException, "Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNER", 0);
- zend_restore_error_handling(&error_handling);
return NULL;
}
intern->u.caching.flags |= flags & CIT_PUBLIC;
@@ -1502,8 +1497,7 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
zend_class_entry *ce_cast;
zend_string *class_name;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|S", &zobject, ce_inner, &class_name) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "O|S", &zobject, ce_inner, &class_name) == FAILURE) {
return NULL;
}
ce = Z_OBJCE_P(zobject);
@@ -1514,7 +1508,6 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
|| !ce_cast->get_iterator
) {
zend_throw_exception(spl_ce_LogicException, "Class to downcast to not found or not base class or does not implement Traversable", 0);
- zend_restore_error_handling(&error_handling);
return NULL;
}
ce = ce_cast;
@@ -1523,12 +1516,10 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
zend_call_method_with_0_params(zobject, ce, &ce->iterator_funcs.zf_new_iterator, "getiterator", &retval);
if (EG(exception)) {
zval_ptr_dtor(&retval);
- zend_restore_error_handling(&error_handling);
return NULL;
}
if (Z_TYPE(retval) != IS_OBJECT || !instanceof_function(Z_OBJCE(retval), zend_ce_traversable)) {
zend_throw_exception_ex(spl_ce_LogicException, 0, "%s::getIterator() must return an object that implements Traversable", ce->name->val);
- zend_restore_error_handling(&error_handling);
return NULL;
}
zobject = &retval;
@@ -1539,6 +1530,7 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
break;
}
case DIT_AppendIterator:
+ zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling);
spl_instantiate(spl_ce_ArrayIterator, &intern->u.append.zarrayit);
zend_call_method_with_0_params(&intern->u.append.zarrayit, spl_ce_ArrayIterator, &spl_ce_ArrayIterator->constructor, "__construct", NULL);
intern->u.append.iterator = spl_ce_ArrayIterator->get_iterator(spl_ce_ArrayIterator, &intern->u.append.zarrayit, 0);
@@ -1553,21 +1545,22 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
intern->u.regex.use_flags = ZEND_NUM_ARGS() >= 5;
intern->u.regex.flags = 0;
intern->u.regex.preg_flags = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS|lll", &zobject, ce_inner, &regex, &mode, &intern->u.regex.flags, &intern->u.regex.preg_flags) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "OS|lll", &zobject, ce_inner, &regex, &mode, &intern->u.regex.flags, &intern->u.regex.preg_flags) == FAILURE) {
return NULL;
}
if (mode < 0 || mode >= REGIT_MODE_MAX) {
zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Illegal mode %pd", mode);
- zend_restore_error_handling(&error_handling);
return NULL;
}
intern->u.regex.mode = mode;
intern->u.regex.regex = zend_string_copy(regex);
+
+ zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling);
intern->u.regex.pce = pcre_get_compiled_regex_cache(regex);
+ zend_restore_error_handling(&error_handling);
+
if (intern->u.regex.pce == NULL) {
/* pcre_get_compiled_regex_cache has already sent error */
- zend_restore_error_handling(&error_handling);
return NULL;
}
intern->u.regex.pce->refcount++;
@@ -1578,8 +1571,7 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
case DIT_RecursiveCallbackFilterIterator: {
_spl_cbfilter_it_intern *cfi = emalloc(sizeof(*cfi));
cfi->fci.object = NULL;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "Of", &zobject, ce_inner, &cfi->fci, &cfi->fcc) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "Of", &zobject, ce_inner, &cfi->fci, &cfi->fcc) == FAILURE) {
efree(cfi);
return NULL;
}
@@ -1592,15 +1584,12 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
break;
}
default:
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &zobject, ce_inner) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "O", &zobject, ce_inner) == FAILURE) {
return NULL;
}
break;
}
- zend_restore_error_handling(&error_handling);
-
if (inc_refcount) {
ZVAL_COPY(&intern->inner.zobject, zobject);
} else {
diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c
index 619ed3883a..76933a8228 100644
--- a/ext/spl/spl_observer.c
+++ b/ext/spl/spl_observer.c
@@ -976,18 +976,13 @@ SPL_METHOD(MultipleIterator, __construct)
{
spl_SplObjectStorage *intern;
zend_long flags = MIT_NEED_ALL|MIT_KEYS_NUMERIC;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &flags) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|l", &flags) == FAILURE) {
return;
}
intern = Z_SPLOBJSTORAGE_P(getThis());
intern->flags = flags;
- zend_restore_error_handling(&error_handling);
}
/* }}} */
diff --git a/ext/spl/tests/CallbackFilterIteratorTest-002.phpt b/ext/spl/tests/CallbackFilterIteratorTest-002.phpt
index bc4fd14647..1f71d3032a 100644
--- a/ext/spl/tests/CallbackFilterIteratorTest-002.phpt
+++ b/ext/spl/tests/CallbackFilterIteratorTest-002.phpt
@@ -10,27 +10,25 @@ set_error_handler(function($errno, $errstr){
try {
new CallbackFilterIterator();
-} catch(InvalidArgumentException $e) {
+} catch (TypeException $e) {
echo $e->getMessage() . "\n";
}
try {
new CallbackFilterIterator(null);
-} catch(InvalidArgumentException $e) {
- echo $e->getMessage() . "\n";
-} catch(EngineException $e) {
+} catch (TypeException $e) {
echo $e->getMessage() . "\n";
}
try {
new CallbackFilterIterator(new ArrayIterator(array()), null);
-} catch(InvalidArgumentException $e) {
+} catch (TypeException $e) {
echo $e->getMessage() . "\n";
}
try {
new CallbackFilterIterator(new ArrayIterator(array()), array());
-} catch(InvalidArgumentException $e) {
+} catch (TypeException $e) {
echo $e->getMessage() . "\n";
}
diff --git a/ext/spl/tests/SplFixedArray__construct_param_array.phpt b/ext/spl/tests/SplFixedArray__construct_param_array.phpt
index aa5933ebdb..e1515c4039 100644
--- a/ext/spl/tests/SplFixedArray__construct_param_array.phpt
+++ b/ext/spl/tests/SplFixedArray__construct_param_array.phpt
@@ -7,11 +7,10 @@ PHPNW Test Fest 2009 - Jordan Hatch
try {
$array = new SplFixedArray( array("string", 1) );
-}
-catch(InvalidArgumentException $iae) {
+} catch (TypeException $iae) {
echo "Ok - ".$iae->getMessage().PHP_EOL;
}
?>
--EXPECTF--
-Ok - SplFixedArray::__construct() expects parameter 1 to be integer, array given \ No newline at end of file
+Ok - SplFixedArray::__construct() expects parameter 1 to be integer, array given
diff --git a/ext/spl/tests/SplFixedArray__construct_param_string.phpt b/ext/spl/tests/SplFixedArray__construct_param_string.phpt
index 411d7402df..66c7fe6a59 100644
--- a/ext/spl/tests/SplFixedArray__construct_param_string.phpt
+++ b/ext/spl/tests/SplFixedArray__construct_param_string.phpt
@@ -6,8 +6,7 @@ PHPNW Test Fest 2009 - Jordan Hatch
<?php
try {
$array = new SplFixedArray( "string" );
-}
-catch(InvalidArgumentException $iae) {
+} catch (TypeException $iae) {
echo "Ok - ".$iae->getMessage().PHP_EOL;
}
diff --git a/ext/spl/tests/SplFixedArray_construct_param_SplFixedArray.phpt b/ext/spl/tests/SplFixedArray_construct_param_SplFixedArray.phpt
index 10d4c64a0c..20f4e7970c 100644
--- a/ext/spl/tests/SplFixedArray_construct_param_SplFixedArray.phpt
+++ b/ext/spl/tests/SplFixedArray_construct_param_SplFixedArray.phpt
@@ -6,8 +6,7 @@ Philip Norton philipnorton42@gmail.com
<?php
try {
$array = new SplFixedArray(new SplFixedArray(3));
-}
-catch(InvalidArgumentException $iae) {
+} catch (TypeException $iae) {
echo "Ok - ".$iae->getMessage().PHP_EOL;
}
diff --git a/ext/spl/tests/SplTempFileObject_constructor_error.phpt b/ext/spl/tests/SplTempFileObject_constructor_error.phpt
index a6c71717b5..8eb306689d 100644
--- a/ext/spl/tests/SplTempFileObject_constructor_error.phpt
+++ b/ext/spl/tests/SplTempFileObject_constructor_error.phpt
@@ -2,11 +2,11 @@
SPL SplTempFileObject constructor sets correct defaults when pass 0 arguments
--FILE--
<?php
-new SplTempFileObject('invalid');
+try {
+ new SplTempFileObject('invalid');
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
?>
--EXPECTF--
-Fatal error: Uncaught exception 'RuntimeException' with message 'SplTempFileObject::__construct() expects parameter 1 to be integer, string given' in %s
-Stack trace:
-#0 %s: SplTempFileObject->__construct('invalid')
-#1 {main}
- thrown in %s
+SplTempFileObject::__construct() expects parameter 1 to be integer, string given
diff --git a/ext/spl/tests/arrayObject___construct_error1.phpt b/ext/spl/tests/arrayObject___construct_error1.phpt
index 21c312d2d0..cff0dd048d 100644
--- a/ext/spl/tests/arrayObject___construct_error1.phpt
+++ b/ext/spl/tests/arrayObject___construct_error1.phpt
@@ -7,14 +7,14 @@ $a = new stdClass;
$a->p = 1;
try {
var_dump(new ArrayObject($a, 0, "Exception"));
-} catch (InvalidArgumentException $e) {
+} catch (TypeException $e) {
echo $e->getMessage() . "(" . $e->getLine() . ")\n";
}
echo "Non-existent class:\n";
try {
var_dump(new ArrayObject(new stdClass, 0, "nonExistentClassName"));
-} catch (InvalidArgumentException $e) {
+} catch (TypeException $e) {
echo $e->getMessage() . "(" . $e->getLine() . ")\n";
}
?>
diff --git a/ext/spl/tests/arrayObject___construct_error2.phpt b/ext/spl/tests/arrayObject___construct_error2.phpt
index 850a2cb3fc..d075516725 100644
--- a/ext/spl/tests/arrayObject___construct_error2.phpt
+++ b/ext/spl/tests/arrayObject___construct_error2.phpt
@@ -13,10 +13,10 @@ Class C implements Iterator {
try {
var_dump(new ArrayObject(new stdClass, 0, "C", "extra"));
-} catch (InvalidArgumentException $e) {
+} catch (TypeException $e) {
echo $e->getMessage() . "(" . $e->getLine() . ")\n";
}
?>
--EXPECTF--
Too many arguments:
-ArrayObject::__construct() expects at most 3 parameters, 4 given(12) \ No newline at end of file
+ArrayObject::__construct() expects at most 3 parameters, 4 given(12)
diff --git a/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt b/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt
index 4715eea986..b4c3756cb5 100644
--- a/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt
+++ b/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt
@@ -28,7 +28,7 @@ try {
foreach($ao as $key=>$value) {
echo " $key=>$value\n";
}
-} catch (Exception $e) {
+} catch (TypeException $e) {
var_dump($e->getMessage());
}
@@ -37,7 +37,7 @@ try {
foreach($ao as $key=>$value) {
echo " $key=>$value\n";
}
-} catch (Exception $e) {
+} catch (TypeException $e) {
var_dump($e->getMessage());
}
diff --git a/ext/spl/tests/bug54292.phpt b/ext/spl/tests/bug54292.phpt
index d9175f7e6f..44d12ee242 100644
--- a/ext/spl/tests/bug54292.phpt
+++ b/ext/spl/tests/bug54292.phpt
@@ -5,7 +5,7 @@ Bug #54292 (Wrong parameter causes crash in SplFileObject::__construct())
try {
new SplFileObject('foo', array());
-} catch (Exception $e) {
+} catch (TypeException $e) {
var_dump($e->getMessage());
}
diff --git a/ext/spl/tests/fixedarray_005.phpt b/ext/spl/tests/fixedarray_005.phpt
index 72970a9a1f..83727a23b9 100644
--- a/ext/spl/tests/fixedarray_005.phpt
+++ b/ext/spl/tests/fixedarray_005.phpt
@@ -1,18 +1,30 @@
--TEST--
-SPL: FixedArray: Trying to instantiate passing object to constructor parameter
+SPL: FixedArray: Invalid arguments
--FILE--
<?php
-$b = new stdClass;
-
try {
- $a = new SplFixedArray($b);
+ $a = new SplFixedArray(new stdClass);
+} catch (TypeException $iae) {
+ echo "Ok - ".$iae->getMessage().PHP_EOL;
}
-catch(InvalidArgumentException $iae) {
+
+try {
+ $a = new SplFixedArray('FOO');
+} catch (TypeException $iae) {
echo "Ok - ".$iae->getMessage().PHP_EOL;
}
+try {
+ $a = new SplFixedArray('');
+} catch (TypeException $iae) {
+ echo "Ok - ".$iae->getMessage().PHP_EOL;
+}
?>
---EXPECTF--
+===DONE===
+--EXPECT--
Ok - SplFixedArray::__construct() expects parameter 1 to be integer, object given
+Ok - SplFixedArray::__construct() expects parameter 1 to be integer, string given
+Ok - SplFixedArray::__construct() expects parameter 1 to be integer, string given
+===DONE===
diff --git a/ext/spl/tests/fixedarray_009.phpt b/ext/spl/tests/fixedarray_009.phpt
index d67c7ccb69..f255ed299a 100644
--- a/ext/spl/tests/fixedarray_009.phpt
+++ b/ext/spl/tests/fixedarray_009.phpt
@@ -5,8 +5,7 @@ SPL: FixedArray: Trying to instantiate passing string to construtor parameter
try {
$a = new SplFixedArray('FOO');
-}
-catch(InvalidArgumentException $iae) {
+} catch (TypeException $iae) {
echo "Ok - ".$iae->getMessage().PHP_EOL;
}
?>
diff --git a/ext/spl/tests/fixedarray_015.phpt b/ext/spl/tests/fixedarray_015.phpt
index f12d83bb39..d189d41da3 100644
--- a/ext/spl/tests/fixedarray_015.phpt
+++ b/ext/spl/tests/fixedarray_015.phpt
@@ -5,8 +5,7 @@ SPL: FixedArray: accessing uninitialized array
try {
$a = new SplFixedArray('');
-}
-catch(InvalidArgumentException $iae) {
+} catch (TypeException $iae) {
echo "Ok - ".$iae->getMessage().PHP_EOL;
}
diff --git a/ext/spl/tests/iterator_056.phpt b/ext/spl/tests/iterator_056.phpt
index 4b0e75a7d4..ee98263638 100644
--- a/ext/spl/tests/iterator_056.phpt
+++ b/ext/spl/tests/iterator_056.phpt
@@ -1,19 +1,64 @@
--TEST--
-SPL: FilterIterator::__construct(void)
+SPL: Calling __construct(void) on class extending SPL iterator
--CREDITS--
Sebastian Schürmann
--FILE--
<?php
+
class myFilterIterator extends FilterIterator {
- function accept() {
-
- }
+ function accept() { }
}
+
+class myCachingIterator extends CachingIterator { }
+
+class myRecursiveCachingIterator extends RecursiveCachingIterator { }
+
+class myParentIterator extends ParentIterator { }
+
+class myLimitIterator extends LimitIterator { }
+
+class myNoRewindIterator extends NoRewindIterator {}
+
try {
$it = new myFilterIterator();
-} catch (InvalidArgumentException $e) {
- echo 'InvalidArgumentException thrown';
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
}
+
+try {
+ $it = new myCachingIterator();
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
+
+try {
+ $it = new myRecursiveCachingIterator();
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
+
+try {
+ $it = new myParentIterator();
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
+
+try {
+ $it = new myLimitIterator();
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ $it = new myNoRewindIterator();
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
+}
+
?>
--EXPECT--
-InvalidArgumentException thrown
+FilterIterator::__construct() expects exactly 1 parameter, 0 given
+CachingIterator::__construct() expects at least 1 parameter, 0 given
+RecursiveCachingIterator::__construct() expects at least 1 parameter, 0 given
+ParentIterator::__construct() expects exactly 1 parameter, 0 given
+LimitIterator::__construct() expects at least 1 parameter, 0 given
+NoRewindIterator::__construct() expects exactly 1 parameter, 0 given
diff --git a/ext/spl/tests/iterator_059.phpt b/ext/spl/tests/iterator_059.phpt
deleted file mode 100644
index 8c579ae43a..0000000000
--- a/ext/spl/tests/iterator_059.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-SPL: CachingIterator::__construct(void)
---CREDITS--
-Sebastian Schürmann
---FILE--
-<?php
-class myCachingIterator extends CachingIterator {
-
-}
-try {
- $it = new myCachingIterator();
-} catch (InvalidArgumentException $e) {
- echo 'InvalidArgumentException thrown';
-}
-?>
---EXPECT--
-InvalidArgumentException thrown
diff --git a/ext/spl/tests/iterator_060.phpt b/ext/spl/tests/iterator_060.phpt
deleted file mode 100644
index 0c3b6c21d2..0000000000
--- a/ext/spl/tests/iterator_060.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-SPL: RecursiveCachingIterator::__construct(void)
---CREDITS--
-Sebastian Schürmann
---FILE--
-<?php
-class myRecursiveCachingIterator extends RecursiveCachingIterator {
-
-}
-try {
- $it = new myRecursiveCachingIterator();
-} catch (InvalidArgumentException $e) {
- echo 'InvalidArgumentException thrown';
-}
-?>
---EXPECT--
-InvalidArgumentException thrown
diff --git a/ext/spl/tests/iterator_061.phpt b/ext/spl/tests/iterator_061.phpt
deleted file mode 100644
index 472f8da196..0000000000
--- a/ext/spl/tests/iterator_061.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-SPL: ParentIterator::__construct(void)
---CREDITS--
-Sebastian Schürmann
---FILE--
-<?php
-class myParentIterator extends ParentIterator {
-
-}
-try {
- $it = new myParentIterator();
-} catch (InvalidArgumentException $e) {
- echo 'InvalidArgumentException thrown';
-}
-?>
---EXPECT--
-InvalidArgumentException thrown
diff --git a/ext/spl/tests/iterator_063.phpt b/ext/spl/tests/iterator_063.phpt
deleted file mode 100644
index 4d4112bac5..0000000000
--- a/ext/spl/tests/iterator_063.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-SPL: LimitIterator::__construct(void)
---CREDITS--
-Sebastian Schürmann
---FILE--
-<?php
-class myLimitIterator extends LimitIterator {
-
-}
-try {
- $it = new myLimitIterator();
-} catch (InvalidArgumentException $e) {
- echo 'InvalidArgumentException thrown';
-}
-?>
---EXPECT--
-InvalidArgumentException thrown
diff --git a/ext/spl/tests/iterator_064.phpt b/ext/spl/tests/iterator_064.phpt
deleted file mode 100644
index 6a62e6c9c5..0000000000
--- a/ext/spl/tests/iterator_064.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-SPL: CachingIterator::__construct(void)
---CREDITS--
-Sebastian Schürmann
---FILE--
-<?php
-class myCachingIterator extends CachingIterator {}
-try {
- $it = new myCachingIterator();
-} catch (InvalidArgumentException $e) {
- echo 'InvalidArgumentException thrown';
-}
-?>
---EXPECT--
-InvalidArgumentException thrown
diff --git a/ext/spl/tests/iterator_065.phpt b/ext/spl/tests/iterator_065.phpt
deleted file mode 100644
index 9ea2974cd4..0000000000
--- a/ext/spl/tests/iterator_065.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-SPL: RecursiveCachingIterator::__construct(void)
---CREDITS--
-Sebastian Schürmann
---FILE--
-<?php
-class myRecursiveCachingIterator extends RecursiveCachingIterator {}
-try {
- $it = new myRecursiveCachingIterator();
-} catch (InvalidArgumentException $e) {
- echo 'InvalidArgumentException thrown';
-}
-?>
---EXPECT--
-InvalidArgumentException thrown
diff --git a/ext/spl/tests/iterator_066.phpt b/ext/spl/tests/iterator_066.phpt
deleted file mode 100644
index 008c47ccc5..0000000000
--- a/ext/spl/tests/iterator_066.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-SPL: NoRewindIterator::__construct(void)
---CREDITS--
-Sebastian Schürmann
---FILE--
-<?php
-class myNoRewindIterator extends NoRewindIterator {}
-try {
- $it = new myNoRewindIterator();
-} catch (InvalidArgumentException $e) {
- echo 'InvalidArgumentException thrown';
-}
-?>
---EXPECT--
-InvalidArgumentException thrown
diff --git a/ext/spl/tests/recursive_tree_iterator_003.phpt b/ext/spl/tests/recursive_tree_iterator_003.phpt
index 83c8553942..4cc7000a19 100644
--- a/ext/spl/tests/recursive_tree_iterator_003.phpt
+++ b/ext/spl/tests/recursive_tree_iterator_003.phpt
@@ -1,16 +1,14 @@
--TEST--
SPL: RecursiveTreeIterator(non-traversable)
---INI--
-error_reporting=E_ALL&~E_NOTICE
--FILE--
<?php
try {
new RecursiveTreeIterator(new ArrayIterator(array()));
-} catch (InvalidArgumentException $e) {
- echo "InvalidArgumentException thrown\n";
+} catch (TypeException $e) {
+ echo $e->getMessage(), "\n";
}
?>
===DONE===
---EXPECTF--
-InvalidArgumentException thrown
+--EXPECT--
+RecursiveCachingIterator::__construct() expects parameter 1 to be RecursiveIterator, object given
===DONE===
diff --git a/ext/spl/tests/spl_iterator_iterator_constructor.phpt b/ext/spl/tests/spl_iterator_iterator_constructor.phpt
index d4fdb14c13..ec103f5c9c 100644
--- a/ext/spl/tests/spl_iterator_iterator_constructor.phpt
+++ b/ext/spl/tests/spl_iterator_iterator_constructor.phpt
@@ -6,23 +6,19 @@ TestFest London May 2009
--FILE--
<?php
- //I think this is testing line 1297 of spl_iterators.c
-
- $array = array(array(7,8,9),1,2,3,array(4,5,6));
+$array = array(array(7,8,9),1,2,3,array(4,5,6));
$arrayIterator = new ArrayIterator($array);
try {
-$test = new IteratorIterator($arrayIterator);
-
-$test = new IteratorIterator($arrayIterator, 1);
-$test = new IteratorIterator($arrayIterator, 1, 1);
-$test = new IteratorIterator($arrayIterator, 1, 1, 1);
-$test = new IteratorIterator($arrayIterator, 1, 1, 1, 1);
+ $test = new IteratorIterator($arrayIterator);
-} catch (InvalidArgumentException $e){
- print $e->getMessage() . "\n";
+ $test = new IteratorIterator($arrayIterator, 1);
+ $test = new IteratorIterator($arrayIterator, 1, 1);
+ $test = new IteratorIterator($arrayIterator, 1, 1, 1);
+ $test = new IteratorIterator($arrayIterator, 1, 1, 1, 1);
+} catch (TypeException $e){
+ echo $e->getMessage() . "\n";
}
-
?>
===DONE===
--EXPECTF--
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c
index 028881f21a..94172048ca 100644
--- a/ext/sqlite3/sqlite3.c
+++ b/ext/sqlite3/sqlite3.c
@@ -103,18 +103,13 @@ PHP_METHOD(sqlite3, open)
char *filename, *encryption_key, *fullpath;
size_t filename_len, encryption_key_len = 0;
zend_long flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
- zend_error_handling error_handling;
db_obj = Z_SQLITE3_DB_P(object);
- zend_replace_error_handling(EH_THROW, NULL, &error_handling);
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS(), "p|ls", &filename, &filename_len, &flags, &encryption_key, &encryption_key_len)) {
- zend_restore_error_handling(&error_handling);
+ if (FAILURE == zend_parse_parameters_throw(ZEND_NUM_ARGS(), "p|ls", &filename, &filename_len, &flags, &encryption_key, &encryption_key_len)) {
return;
}
- zend_restore_error_handling(&error_handling);
-
if (db_obj->initialised) {
zend_throw_exception(zend_exception_get_default(), "Already initialised DB Object", 0);
}
@@ -1600,17 +1595,15 @@ PHP_METHOD(sqlite3stmt, __construct)
php_sqlite3_free_list *free_item;
stmt_obj = Z_SQLITE3_STMT_P(object);
- zend_replace_error_handling(EH_THROW, NULL, &error_handling);
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS", &db_zval, php_sqlite3_sc_entry, &sql) == FAILURE) {
- zend_restore_error_handling(&error_handling);
+ if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "OS", &db_zval, php_sqlite3_sc_entry, &sql) == FAILURE) {
return;
}
db_obj = Z_SQLITE3_DB_P(db_zval);
+ zend_replace_error_handling(EH_THROW, NULL, &error_handling);
SQLITE3_CHECK_INITIALIZED(db_obj, db_obj->initialised, SQLite3)
-
zend_restore_error_handling(&error_handling);
if (!sql->len) {
diff --git a/ext/sqlite3/tests/sqlite3_02_open.phpt b/ext/sqlite3/tests/sqlite3_02_open.phpt
index f9155e7d79..985033b33e 100644
--- a/ext/sqlite3/tests/sqlite3_02_open.phpt
+++ b/ext/sqlite3/tests/sqlite3_02_open.phpt
@@ -10,7 +10,7 @@ Felix De Vliegher
try {
$db = new SQLite3();
-} catch (Exception $e) {
+} catch (TypeException $e) {
var_dump($e->getMessage());
}