From 16e40f52f4f535d975cb28e1b0bcc612cdaee6df Mon Sep 17 00:00:00 2001 From: Aliaksandr Bystry Date: Sat, 25 Sep 2021 17:43:53 +0200 Subject: [PATCH 1/6] Fix #69751: Change Error message of sprintf/printf for missing/typo position specifier. --- ext/standard/formatted_print.c | 2 +- ext/standard/tests/strings/bug69751.phpt | 28 +++++++++++++++++++ .../tests/strings/vfprintf_error4.phpt | 2 +- 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 ext/standard/tests/strings/bug69751.phpt diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c index ab205feb6fa32..8ed60c0055bdf 100644 --- a/ext/standard/formatted_print.c +++ b/ext/standard/formatted_print.c @@ -385,7 +385,7 @@ int php_sprintf_get_argnum(char **format, size_t *format_len) { int argnum = php_sprintf_getnumber(format, format_len); if (argnum <= 0) { - zend_value_error("Argument number must be greater than zero"); + zend_value_error("Argument number specifier must be greater than zero and less than %d", INT_MAX); return ARG_NUM_INVALID; } diff --git a/ext/standard/tests/strings/bug69751.phpt b/ext/standard/tests/strings/bug69751.phpt new file mode 100644 index 0000000000000..f75af897e0e58 --- /dev/null +++ b/ext/standard/tests/strings/bug69751.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #69751: Change Error message of sprintf/printf for missing/typo position specifier. +--FILE-- +getMessage(), "\n"; +} + +try { + sprintf('%3$s, %2$s %1$s', "a", "b"); +} catch (ArgumentCountError $e) { + echo $e->getMessage(), "\n"; +} + +try { + sprintf('%2147483648$s, %2$s %1$s', "a", "b"); +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} + +?> +--EXPECTF-- +Argument number specifier must be greater than zero and less than %d +4 arguments are required, 3 given +Argument number specifier must be greater than zero and less than %d diff --git a/ext/standard/tests/strings/vfprintf_error4.phpt b/ext/standard/tests/strings/vfprintf_error4.phpt index b635c7781e956..7c4578ee40907 100644 --- a/ext/standard/tests/strings/vfprintf_error4.phpt +++ b/ext/standard/tests/strings/vfprintf_error4.phpt @@ -35,4 +35,4 @@ unlink( $file ); --EXPECT-- -- Testing vfprintf() function with other strangeties -- vfprintf(): Argument #1 ($stream) must be of type resource, string given -Error found: Argument number must be greater than zero. +Error found: Argument number specifier must be greater than zero and less than 2147483647. From a2a1f6de5c243c1a24df6b665251d3e04f1275a2 Mon Sep 17 00:00:00 2001 From: Aliaksandr Bystry Date: Sat, 25 Sep 2021 20:40:36 +0200 Subject: [PATCH 2/6] Fix failing test. --- tests/strings/002.phpt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/strings/002.phpt b/tests/strings/002.phpt index a43a68c88b999..8998298e1faf4 100644 --- a/tests/strings/002.phpt +++ b/tests/strings/002.phpt @@ -18,9 +18,9 @@ printf("printf test 7:%010.2f\n", 2.5); printf("printf test 8:<%20s>\n", "foo"); printf("printf test 9:<%-20s>\n", "bar"); printf("printf test 10: 123456789012345\n"); -printf("printf test 10:<%15s>\n", "høyesterettsjustitiarius"); +printf("printf test 10:<%15s>\n", "hшyesterettsjustitiarius"); printf("printf test 11: 123456789012345678901234567890\n"); -printf("printf test 11:<%30s>\n", "høyesterettsjustitiarius"); +printf("printf test 11:<%30s>\n", "hшyesterettsjustitiarius"); printf("printf test 12:%5.2f\n", -12.34); printf("printf test 13:%5d\n", -12); printf("printf test 14:%c\n", 64); @@ -61,9 +61,9 @@ printf test 7:0000002.50 printf test 8:< foo> printf test 9: printf test 10: 123456789012345 -printf test 10: +printf test 10: printf test 11: 123456789012345678901234567890 -printf test 11:< høyesterettsjustitiarius> +printf test 11:< hшyesterettsjustitiarius> printf test 12:-12.34 printf test 13: -12 printf test 14:@ @@ -82,5 +82,5 @@ printf test 26:2 1 printf test 27:3 1 2 printf test 28:02 1 printf test 29:2 1 -printf test 30:Error found: Argument number must be greater than zero +printf test 30:Error found: Argument number specifier must be greater than zero and less than 2147483647 vprintf test 1:2 1 From 3820474fc7e114f52e43482fee9717dbaaccf4ba Mon Sep 17 00:00:00 2001 From: Aliaksandr Bystry Date: Sat, 25 Sep 2021 21:22:15 +0200 Subject: [PATCH 3/6] Fix issue with test encoding. --- tests/strings/002.phpt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/strings/002.phpt b/tests/strings/002.phpt index 8998298e1faf4..65d57e9ca8aa3 100644 --- a/tests/strings/002.phpt +++ b/tests/strings/002.phpt @@ -18,9 +18,9 @@ printf("printf test 7:%010.2f\n", 2.5); printf("printf test 8:<%20s>\n", "foo"); printf("printf test 9:<%-20s>\n", "bar"); printf("printf test 10: 123456789012345\n"); -printf("printf test 10:<%15s>\n", "hшyesterettsjustitiarius"); +printf("printf test 10:<%15s>\n", "høyesterettsjustitiarius"); printf("printf test 11: 123456789012345678901234567890\n"); -printf("printf test 11:<%30s>\n", "hшyesterettsjustitiarius"); +printf("printf test 11:<%30s>\n", "høyesterettsjustitiarius"); printf("printf test 12:%5.2f\n", -12.34); printf("printf test 13:%5d\n", -12); printf("printf test 14:%c\n", 64); @@ -61,9 +61,9 @@ printf test 7:0000002.50 printf test 8:< foo> printf test 9: printf test 10: 123456789012345 -printf test 10: +printf test 10: printf test 11: 123456789012345678901234567890 -printf test 11:< hшyesterettsjustitiarius> +printf test 11:< høyesterettsjustitiarius> printf test 12:-12.34 printf test 13: -12 printf test 14:@ From cbfb00b891f1f81e6251c924b24b92c808d16cdb Mon Sep 17 00:00:00 2001 From: Aliaksandr Bystry Date: Sat, 25 Sep 2021 22:01:32 +0200 Subject: [PATCH 4/6] Try fix failing test. --- tests/strings/002.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/strings/002.phpt b/tests/strings/002.phpt index 65d57e9ca8aa3..ccd7b92b3a439 100644 --- a/tests/strings/002.phpt +++ b/tests/strings/002.phpt @@ -1,4 +1,4 @@ ---TEST-- +--TEST-- Formatted print functions --FILE-- Date: Sun, 26 Sep 2021 07:55:02 +0200 Subject: [PATCH 5/6] Fix first test line. --- tests/strings/002.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/strings/002.phpt b/tests/strings/002.phpt index ccd7b92b3a439..65d57e9ca8aa3 100644 --- a/tests/strings/002.phpt +++ b/tests/strings/002.phpt @@ -1,4 +1,4 @@ ---TEST-- +--TEST-- Formatted print functions --FILE-- Date: Sun, 26 Sep 2021 08:32:29 +0200 Subject: [PATCH 6/6] Replace incorrectly encoded symbol in test. --- tests/strings/002.phpt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/strings/002.phpt b/tests/strings/002.phpt index 65d57e9ca8aa3..f37d7c86d136e 100644 --- a/tests/strings/002.phpt +++ b/tests/strings/002.phpt @@ -18,9 +18,9 @@ printf("printf test 7:%010.2f\n", 2.5); printf("printf test 8:<%20s>\n", "foo"); printf("printf test 9:<%-20s>\n", "bar"); printf("printf test 10: 123456789012345\n"); -printf("printf test 10:<%15s>\n", "høyesterettsjustitiarius"); +printf("printf test 10:<%15s>\n", "hoyesterettsjustitiarius"); printf("printf test 11: 123456789012345678901234567890\n"); -printf("printf test 11:<%30s>\n", "høyesterettsjustitiarius"); +printf("printf test 11:<%30s>\n", "hoyesterettsjustitiarius"); printf("printf test 12:%5.2f\n", -12.34); printf("printf test 13:%5d\n", -12); printf("printf test 14:%c\n", 64); @@ -61,9 +61,9 @@ printf test 7:0000002.50 printf test 8:< foo> printf test 9: printf test 10: 123456789012345 -printf test 10: +printf test 10: printf test 11: 123456789012345678901234567890 -printf test 11:< høyesterettsjustitiarius> +printf test 11:< hoyesterettsjustitiarius> printf test 12:-12.34 printf test 13: -12 printf test 14:@