}
f = Z_LVAL_PP(from);
- if (f > Z_STRLEN_PP(str) || (f < 0 && -f > Z_STRLEN_PP(str))) {
+ if (f > Z_STRLEN_PP(str)) {
RETURN_FALSE;
+ } else if (f < 0 && -f > Z_STRLEN_PP(str)) {
+ f = 0;
}
if (l < 0 && (l + Z_STRLEN_PP(str) - f) < 0) {
offset = (offset < 0) ? 0 : offset;
}
- if (offset > s1_len) {
+ if (offset >= s1_len) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The start position cannot exceed initial string length");
RETURN_FALSE;
}
if (len > s1_len - offset) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The length cannot exceed initial string length");
- RETURN_FALSE;
+ len = s1_len - offset;
}
cmp_len = (uint) (len ? len : MAX(s2_len, (s1_len - offset)));
var_dump(substr_compare("abcde", "bc", 1, 3));
var_dump(substr_compare("abcde", "cd", 1, 2));
var_dump(substr_compare("abcde", "abc", 5, 1));
+var_dump(substr_compare("abcde", "abcdef", -10, 10));
var_dump(substr_compare("abcde", -1, 0, NULL, new stdClass));
echo "Test\n";
int(1)
int(-1)
-Warning: substr_compare(): The length cannot exceed initial string length in %s on line %d
+Warning: substr_compare(): The start position cannot exceed initial string length in %s on line %d
bool(false)
+int(0)
Warning: substr_compare() expects parameter 5 to be boolean, object given in %s on line %d
bool(false)