summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/string.c4
-rw-r--r--ext/standard/tests/strings/bug54454.phpt8
-rw-r--r--ext/standard/tests/strings/substr_compare.phpt2
3 files changed, 9 insertions, 5 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 1aae38ccab..5eb0411b18 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -5252,10 +5252,6 @@ PHP_FUNCTION(substr_compare)
RETURN_FALSE;
}
- if (len > s1_len - offset) {
- len = s1_len - offset;
- }
-
cmp_len = (uint) (len ? len : MAX(s2_len, (s1_len - offset)));
if (!cs) {
diff --git a/ext/standard/tests/strings/bug54454.phpt b/ext/standard/tests/strings/bug54454.phpt
new file mode 100644
index 0000000000..88835c983b
--- /dev/null
+++ b/ext/standard/tests/strings/bug54454.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Bug #54454 (substr_compare incorrectly reports equality in some cases)
+--FILE--
+<?php
+var_dump(substr_compare('/', '/asd', 0, 4));
+?>
+--EXPECT--
+int(-3)
diff --git a/ext/standard/tests/strings/substr_compare.phpt b/ext/standard/tests/strings/substr_compare.phpt
index 206ccd5ede..c647506b53 100644
--- a/ext/standard/tests/strings/substr_compare.phpt
+++ b/ext/standard/tests/strings/substr_compare.phpt
@@ -27,7 +27,7 @@ int(-1)
Warning: substr_compare(): The start position cannot exceed initial string length in %s on line %d
bool(false)
-int(0)
+int(-1)
Warning: substr_compare() expects parameter 5 to be boolean, object given in %s on line %d
bool(false)