From: Nikita Popov Date: Tue, 29 Oct 2019 23:48:28 +0000 (-0400) Subject: Use ArgumentCountError in IntlGregorianCalendar ctor X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e0be51d0825bf91a9e9aafb9aeef165ee710bdbc;p=php Use ArgumentCountError in IntlGregorianCalendar ctor --- diff --git a/ext/intl/calendar/gregoriancalendar_methods.cpp b/ext/intl/calendar/gregoriancalendar_methods.cpp index 66fdbb2f2f..e111a0d6a2 100644 --- a/ext/intl/calendar/gregoriancalendar_methods.cpp +++ b/ext/intl/calendar/gregoriancalendar_methods.cpp @@ -59,25 +59,15 @@ static void _php_intlgregcal_constructor_body( // parameter number validation / variant determination if (ZEND_NUM_ARGS() > 6 || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) { - intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, - "intlgregcal_create_instance: too many arguments", 0); - if (!is_constructor) { - zval_ptr_dtor(return_value); - RETVAL_NULL(); - } + zend_argument_count_error("Too many arguments"); return; } + for (variant = ZEND_NUM_ARGS(); variant > 0 && Z_TYPE(args[variant - 1]) == IS_NULL; variant--) {} if (variant == 4) { - intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, - "intlgregcal_create_instance: no variant with 4 arguments " - "(excluding trailing NULLs)", 0); - if (!is_constructor) { - zval_ptr_dtor(return_value); - RETVAL_NULL(); - } + zend_argument_count_error("No variant with 4 arguments (excluding trailing NULLs)"); return; } @@ -85,20 +75,12 @@ static void _php_intlgregcal_constructor_body( if (variant <= 2) { if (zend_parse_parameters(MIN(ZEND_NUM_ARGS(), 2), "|z!s!", &tz_object, &locale, &locale_len) == FAILURE) { - if (!is_constructor) { - zval_ptr_dtor(return_value); - RETVAL_NULL(); - } return; } } if (variant > 2 && zend_parse_parameters(ZEND_NUM_ARGS(), "lll|lll", &largs[0], &largs[1], &largs[2], &largs[3], &largs[4], &largs[5]) == FAILURE) { - if (!is_constructor) { - zval_ptr_dtor(return_value); - RETVAL_NULL(); - } return; } diff --git a/ext/intl/tests/gregoriancalendar___construct_error.phpt b/ext/intl/tests/gregoriancalendar___construct_error.phpt index bef69db877..2f468a12c5 100644 --- a/ext/intl/tests/gregoriancalendar___construct_error.phpt +++ b/ext/intl/tests/gregoriancalendar___construct_error.phpt @@ -8,33 +8,34 @@ if (!extension_loaded('intl')) getMessage() . " in " . $e->getFile() . " on line " . $e->getLine() . "\n"; +try { + var_dump(intlgregcal_create_instance(1,2,3,4,5,6,7)); +} catch (ArgumentCountError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(intlgregcal_create_instance(1,2,3,4,5,6,7,8)); +} catch (ArgumentCountError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(intlgregcal_create_instance(1,2,3,4)); +} catch (ArgumentCountError $e) { + echo $e->getMessage(), "\n"; } - -var_dump(intlgregcal_create_instance(1,2,3,4,5,6,7)); -var_dump(intlgregcal_create_instance(1,2,3,4,5,6,7,8)); -var_dump(intlgregcal_create_instance(1,2,3,4)); try { var_dump(new IntlGregorianCalendar(1,2,NULL,4)); -} catch (IntlException $e) { - print_exception($e); +} catch (ArgumentCountError $e) { + echo $e->getMessage(), "\n"; } try { var_dump(new IntlGregorianCalendar(1,2,3,4,NULL,array())); } catch (TypeError $e) { - print_exception($e); + echo $e->getMessage(), "\n"; } ---EXPECTF-- -Warning: intlgregcal_create_instance(): intlgregcal_create_instance: too many arguments in %s on line %d -NULL - -Warning: intlgregcal_create_instance(): intlgregcal_create_instance: too many arguments in %s on line %d -NULL - -Warning: intlgregcal_create_instance(): intlgregcal_create_instance: no variant with 4 arguments (excluding trailing NULLs) in %s on line %d -NULL - -Exception: IntlGregorianCalendar::__construct(): intlgregcal_create_instance: no variant with 4 arguments (excluding trailing NULLs) in %s on line %d - -Exception: IntlGregorianCalendar::__construct() expects parameter 6 to be int, array given in %s on line %d +--EXPECT-- +Too many arguments +Too many arguments +No variant with 4 arguments (excluding trailing NULLs) +No variant with 4 arguments (excluding trailing NULLs) +IntlGregorianCalendar::__construct() expects parameter 6 to be int, array given