char *temppos, padding;
zend_string *result;
int always_sign;
- int bad_arg_number = 0;
+ int max_missing_argnum = -1;
result = zend_string_alloc(size, 0);
PRINTF_DEBUG(("sprintf: format character='%c'\n", *format));
if (argnum >= argc) {
- bad_arg_number = 1;
+ max_missing_argnum = MAX(max_missing_argnum, argnum);
continue;
}
}
}
- if (bad_arg_number == 1) {
+ if (max_missing_argnum >= 0) {
efree(result);
if (nb_additional_parameters == -1) {
- zend_value_error("The arguments array must contain %d items, %d given", argnum + 1, argc);
+ zend_value_error("The arguments array must contain %d items, %d given", max_missing_argnum + 1, argc);
} else {
- zend_argument_count_error("%d parameters are required, %d given", argnum + nb_additional_parameters + 1, argc + nb_additional_parameters);
+ zend_argument_count_error("%d parameters are required, %d given", max_missing_argnum + nb_additional_parameters + 1, argc + nb_additional_parameters);
}
return NULL;
}
echo $e->getMessage(), "\n";
}
+try {
+ var_dump(sprintf('%100$d %d'));
+} catch (\ArgumentCountError $e) {
+ echo $e->getMessage(), "\n";
+}
+
echo "Done";
?>
--EXPECTF--
3 parameters are required, 1 given
4 parameters are required, 2 given
4 parameters are required, 1 given
+101 parameters are required, 1 given
Done