]> granicus.if.org Git - php/commitdiff
Use ArgumentCountError in IntlGregorianCalendar ctor
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 29 Oct 2019 23:48:28 +0000 (19:48 -0400)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 30 Oct 2019 09:27:52 +0000 (10:27 +0100)
ext/intl/calendar/gregoriancalendar_methods.cpp
ext/intl/tests/gregoriancalendar___construct_error.phpt

index 66fdbb2f2f554e136e909aff4d63ec47ef911ab3..e111a0d6a23fc3f124e2d3aa22fde3fd083363fb 100644 (file)
@@ -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;
        }
 
index bef69db8771cc5da57cbb4c02bbc3fbbeab4f0ea..2f468a12c5cd79ccb749695bc8e3d5bd58285b1f 100644 (file)
@@ -8,33 +8,34 @@ if (!extension_loaded('intl'))
 <?php
 ini_set("intl.error_level", E_WARNING);
 
-function print_exception($e) {
-       echo "\nException: " . $e->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