From 71d512afc32b4164cb5a105164c659d27df93d2a Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Wed, 12 Aug 2020 19:26:54 +0200 Subject: [PATCH] Allow number_format to be only passed 3 arguments --- ext/standard/math.c | 33 +++++-------------- .../tests/math/number_format_with_3_args.phpt | 12 +++++++ .../math/number_format_with_null_args.phpt | 14 ++++++++ 3 files changed, 35 insertions(+), 24 deletions(-) create mode 100644 ext/standard/tests/math/number_format_with_3_args.phpt create mode 100644 ext/standard/tests/math/number_format_with_null_args.phpt diff --git a/ext/standard/math.c b/ext/standard/math.c index d0c2708256e2..c5e0234fdeef 100644 --- a/ext/standard/math.c +++ b/ext/standard/math.c @@ -1097,7 +1097,6 @@ PHP_FUNCTION(number_format) double num; zend_long dec = 0; char *thousand_sep = NULL, *dec_point = NULL; - char thousand_sep_chr = ',', dec_point_chr = '.'; size_t thousand_sep_len = 0, dec_point_len = 0; ZEND_PARSE_PARAMETERS_START(1, 4) @@ -1108,30 +1107,16 @@ PHP_FUNCTION(number_format) Z_PARAM_STRING_OR_NULL(thousand_sep, thousand_sep_len) ZEND_PARSE_PARAMETERS_END(); - switch(ZEND_NUM_ARGS()) { - case 1: - RETURN_STR(_php_math_number_format(num, 0, dec_point_chr, thousand_sep_chr)); - break; - case 2: - RETURN_STR(_php_math_number_format(num, (int)dec, dec_point_chr, thousand_sep_chr)); - break; - case 4: - if (dec_point == NULL) { - dec_point = &dec_point_chr; - dec_point_len = 1; - } - - if (thousand_sep == NULL) { - thousand_sep = &thousand_sep_chr; - thousand_sep_len = 1; - } - - RETVAL_STR(_php_math_number_format_ex(num, (int)dec, - dec_point, dec_point_len, thousand_sep, thousand_sep_len)); - break; - default: - WRONG_PARAM_COUNT; + if (dec_point == NULL) { + dec_point = "."; + dec_point_len = 1; + } + if (thousand_sep == NULL) { + thousand_sep = ","; + thousand_sep_len = 1; } + + RETURN_STR(_php_math_number_format_ex(num, (int)dec, dec_point, dec_point_len, thousand_sep, thousand_sep_len)); } /* }}} */ diff --git a/ext/standard/tests/math/number_format_with_3_args.phpt b/ext/standard/tests/math/number_format_with_3_args.phpt new file mode 100644 index 000000000000..72419ea0e87f --- /dev/null +++ b/ext/standard/tests/math/number_format_with_3_args.phpt @@ -0,0 +1,12 @@ +--TEST-- +number_format should use default thousands seperator when 3 arguments are used +--FILE-- + +--EXPECT-- +string(8) "2,020F14" diff --git a/ext/standard/tests/math/number_format_with_null_args.phpt b/ext/standard/tests/math/number_format_with_null_args.phpt new file mode 100644 index 000000000000..f99a06b980ae --- /dev/null +++ b/ext/standard/tests/math/number_format_with_null_args.phpt @@ -0,0 +1,14 @@ +--TEST-- +number_format should use default values when passed null +--FILE-- + +--EXPECT-- +string(8) "2T020.14" +string(8) "2,020F14"