com php-src: Fixed bug #68852 (broken strrpos with negative offset): ext/standard/string.c ext/standard/tests/strings/strrpos.phpt
| From: | Xinchen Hui | Date: | Sun, 18 Jan 2015 15:05:27 +0000 |
| Subject: | com php-src: Fixed bug #68852 (broken strrpos with negative offset): ext/standard/string.c ext/standard/tests/strings/strrpos.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-84160@lists.php.net to get a copy of this message | ||
Commit: f3052c5d2f86f9dac756b7c9519017b22b99ed3e
Author: Xinchen Hui <laruence@php.net> Sun, 18 Jan 2015 10:05:27 -0500
Parents: 218d83d217e9a92d2ceb9a67f989e4851f6cf0a1
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=f3052c5d2f86f9dac756b7c9519017b22b99ed3e
Log:
Fixed bug #68852 (broken strrpos with negative offset)
Bugs:
https://bugs.php.net/68852
Changed paths:
M ext/standard/string.c
M ext/standard/tests/strings/strrpos.phpt
Diff:
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 8bb8a9c..5807304 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -2050,8 +2050,8 @@ PHP_FUNCTION(strrpos)
RETURN_FALSE;
}
p = haystack->val;
- if (haystack->len + (size_t)offset >= needle_len) {
- e = haystack->val + haystack->len + (size_t)offset + needle_len;
+ if (haystack->len + offset + 1 >= needle_len) {
+ e = haystack->val + haystack->len + offset + needle_len;
} else {
e = haystack->val + haystack->len;
}
@@ -2149,8 +2149,8 @@ PHP_FUNCTION(strripos)
RETURN_FALSE;
}
p = haystack_dup->val;
- if (haystack->len + (size_t)offset >= needle->len) {
- e = haystack_dup->val + haystack->len + (size_t)offset + needle->len;
+ if (haystack->len + offset + 1 >= needle->len) {
+ e = haystack_dup->val + haystack->len + offset + needle->len;
} else {
e = haystack_dup->val + haystack->len;
}
diff --git a/ext/standard/tests/strings/strrpos.phpt b/ext/standard/tests/strings/strrpos.phpt
index 691f67e..6b5ee09 100644
--- a/ext/standard/tests/strings/strrpos.phpt
+++ b/ext/standard/tests/strings/strrpos.phpt
@@ -15,6 +15,10 @@ strrpos() function
var_dump(@strrpos("a", ""));
var_dump(@strrpos("", "a"));
var_dump(@strrpos("\\\\a", "\\a"));
+ var_dump(strrpos("/documents/show/5474", '/', -20));
+ var_dump(@strrpos("/documents/show/5474", '/d', -21));
+ var_dump(strrpos("/documents/show/5474", 'd', -19));
+ var_dump(strrpos("/documents/show/5474", '/d', -15));
?>
--EXPECT--
int(5)
@@ -30,3 +34,7 @@ bool(false)
bool(false)
bool(false)
int(1)
+int(0)
+bool(false)
+int(1)
+int(0)