From 7c5c00cbf2ee79771269b810c8a13521ee480165 Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Thu, 22 Aug 2019 11:48:21 +0200 Subject: [PATCH] Promote warnings to errors in substr_compare() --- ext/standard/string.c | 7 ++++--- ext/standard/tests/strings/bug33605.phpt | 10 ++++++---- ext/standard/tests/strings/substr_compare.phpt | 11 +++++++---- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/ext/standard/string.c b/ext/standard/string.c index c2f29baec7732..953cde55724b9 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -6133,7 +6133,7 @@ PHP_FUNCTION(strpbrk) /* {{{ proto int|false substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]]) Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters */ PHP_FUNCTION(substr_compare) -{ + { zend_string *s1, *s2; zend_long offset, len=0; zend_bool len_is_default=1; @@ -6153,8 +6153,8 @@ PHP_FUNCTION(substr_compare) if (len == 0) { RETURN_LONG(0L); } else { - php_error_docref(NULL, E_WARNING, "The length must be greater than or equal to zero"); - RETURN_FALSE; + zend_throw_error(NULL, "The length must be greater than or equal to zero"); + return; } } @@ -6164,6 +6164,7 @@ PHP_FUNCTION(substr_compare) } if ((size_t)offset > ZSTR_LEN(s1)) { + /* TODO Check if Candidate to convert to Exception */ php_error_docref(NULL, E_WARNING, "The start position cannot exceed initial string length"); RETURN_FALSE; } diff --git a/ext/standard/tests/strings/bug33605.phpt b/ext/standard/tests/strings/bug33605.phpt index 7ba38f94f50d2..b3cb2ece957cb 100644 --- a/ext/standard/tests/strings/bug33605.phpt +++ b/ext/standard/tests/strings/bug33605.phpt @@ -2,10 +2,12 @@ Bug #33605 (substr_compare crashes) --FILE-- getMessage(); +} ?> --EXPECTF-- -Warning: substr_compare(): The length must be greater than or equal to zero in %s on line %d -bool(false) +The length must be greater than or equal to zero diff --git a/ext/standard/tests/strings/substr_compare.phpt b/ext/standard/tests/strings/substr_compare.phpt index 9d4bac4ba9938..b0a8a5b0eb509 100644 --- a/ext/standard/tests/strings/substr_compare.phpt +++ b/ext/standard/tests/strings/substr_compare.phpt @@ -13,7 +13,12 @@ var_dump(substr_compare("abcde", "abc", 5, 1)); var_dump(substr_compare("abcde", "abcdef", -10, 10) < 0); var_dump(substr_compare("abcde", "abc", 0, 0)); echo "Test\n"; -var_dump(substr_compare("abcde", "abc", 0, -1)); + +try { + substr_compare("abcde", "abc", 0, -1); +} catch (\Error $e) { + echo $e->getMessage() . "\n"; +} var_dump(substr_compare("abcde", "abc", -1, NULL, -5) > 0); echo "Done\n"; @@ -29,8 +34,6 @@ int(-1) bool(true) int(0) Test - -Warning: substr_compare(): The length must be greater than or equal to zero in %s on line %d -bool(false) +The length must be greater than or equal to zero bool(true) Done