Skip to content

Commit e0be51d

Browse files
committed
Use ArgumentCountError in IntlGregorianCalendar ctor
1 parent 96f361d commit e0be51d

File tree

2 files changed

+26
-43
lines changed

2 files changed

+26
-43
lines changed

ext/intl/calendar/gregoriancalendar_methods.cpp

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -59,46 +59,28 @@ static void _php_intlgregcal_constructor_body(
5959
// parameter number validation / variant determination
6060
if (ZEND_NUM_ARGS() > 6 ||
6161
zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
62-
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
63-
"intlgregcal_create_instance: too many arguments", 0);
64-
if (!is_constructor) {
65-
zval_ptr_dtor(return_value);
66-
RETVAL_NULL();
67-
}
62+
zend_argument_count_error("Too many arguments");
6863
return;
6964
}
65+
7066
for (variant = ZEND_NUM_ARGS();
7167
variant > 0 && Z_TYPE(args[variant - 1]) == IS_NULL;
7268
variant--) {}
7369
if (variant == 4) {
74-
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
75-
"intlgregcal_create_instance: no variant with 4 arguments "
76-
"(excluding trailing NULLs)", 0);
77-
if (!is_constructor) {
78-
zval_ptr_dtor(return_value);
79-
RETVAL_NULL();
80-
}
70+
zend_argument_count_error("No variant with 4 arguments (excluding trailing NULLs)");
8171
return;
8272
}
8373

8474
// argument parsing
8575
if (variant <= 2) {
8676
if (zend_parse_parameters(MIN(ZEND_NUM_ARGS(), 2),
8777
"|z!s!", &tz_object, &locale, &locale_len) == FAILURE) {
88-
if (!is_constructor) {
89-
zval_ptr_dtor(return_value);
90-
RETVAL_NULL();
91-
}
9278
return;
9379
}
9480
}
9581
if (variant > 2 && zend_parse_parameters(ZEND_NUM_ARGS(),
9682
"lll|lll", &largs[0], &largs[1], &largs[2], &largs[3], &largs[4],
9783
&largs[5]) == FAILURE) {
98-
if (!is_constructor) {
99-
zval_ptr_dtor(return_value);
100-
RETVAL_NULL();
101-
}
10284
return;
10385
}
10486

ext/intl/tests/gregoriancalendar___construct_error.phpt

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,33 +8,34 @@ if (!extension_loaded('intl'))
88
<?php
99
ini_set("intl.error_level", E_WARNING);
1010

11-
function print_exception($e) {
12-
echo "\nException: " . $e->getMessage() . " in " . $e->getFile() . " on line " . $e->getLine() . "\n";
11+
try {
12+
var_dump(intlgregcal_create_instance(1,2,3,4,5,6,7));
13+
} catch (ArgumentCountError $e) {
14+
echo $e->getMessage(), "\n";
15+
}
16+
try {
17+
var_dump(intlgregcal_create_instance(1,2,3,4,5,6,7,8));
18+
} catch (ArgumentCountError $e) {
19+
echo $e->getMessage(), "\n";
20+
}
21+
try {
22+
var_dump(intlgregcal_create_instance(1,2,3,4));
23+
} catch (ArgumentCountError $e) {
24+
echo $e->getMessage(), "\n";
1325
}
14-
15-
var_dump(intlgregcal_create_instance(1,2,3,4,5,6,7));
16-
var_dump(intlgregcal_create_instance(1,2,3,4,5,6,7,8));
17-
var_dump(intlgregcal_create_instance(1,2,3,4));
1826
try {
1927
var_dump(new IntlGregorianCalendar(1,2,NULL,4));
20-
} catch (IntlException $e) {
21-
print_exception($e);
28+
} catch (ArgumentCountError $e) {
29+
echo $e->getMessage(), "\n";
2230
}
2331
try {
2432
var_dump(new IntlGregorianCalendar(1,2,3,4,NULL,array()));
2533
} catch (TypeError $e) {
26-
print_exception($e);
34+
echo $e->getMessage(), "\n";
2735
}
28-
--EXPECTF--
29-
Warning: intlgregcal_create_instance(): intlgregcal_create_instance: too many arguments in %s on line %d
30-
NULL
31-
32-
Warning: intlgregcal_create_instance(): intlgregcal_create_instance: too many arguments in %s on line %d
33-
NULL
34-
35-
Warning: intlgregcal_create_instance(): intlgregcal_create_instance: no variant with 4 arguments (excluding trailing NULLs) in %s on line %d
36-
NULL
37-
38-
Exception: IntlGregorianCalendar::__construct(): intlgregcal_create_instance: no variant with 4 arguments (excluding trailing NULLs) in %s on line %d
39-
40-
Exception: IntlGregorianCalendar::__construct() expects parameter 6 to be int, array given in %s on line %d
36+
--EXPECT--
37+
Too many arguments
38+
Too many arguments
39+
No variant with 4 arguments (excluding trailing NULLs)
40+
No variant with 4 arguments (excluding trailing NULLs)
41+
IntlGregorianCalendar::__construct() expects parameter 6 to be int, array given

0 commit comments

Comments
 (0)