com php-src: Better fix: ext/standard/string.c ext/standard/tests/strings/strrpos.phpt ext/standard/tests/stri ngs/strrpos_negative_offset.phpt
| From: | Xinchen Hui | Date: | Mon, 19 Jan 2015 02:38:25 +0000 |
| Subject: | com php-src: Better fix: ext/standard/string.c ext/standard/tests/strings/strrpos.phpt ext/standard/tests/stri ngs/strrpos_negative_offset.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-84162@lists.php.net to get a copy of this message | ||
Commit: 0706032b7344ee3be3e95911e18966b3d97bfe39
Author: Xinchen Hui <laruence@php.net> Sun, 18 Jan 2015 21:38:25 -0500
Parents: 0be3626ec646fd59bbfb2ed2b3b436f265dd8f1e
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=0706032b7344ee3be3e95911e18966b3d97bfe39
Log:
Better fix
Changed paths:
M ext/standard/string.c
M ext/standard/tests/strings/strrpos.phpt
A ext/standard/tests/strings/strrpos_negative_offset.phpt
Diff:
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 5807304..f746a24 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -2050,10 +2050,10 @@ PHP_FUNCTION(strrpos)
RETURN_FALSE;
}
p = haystack->val;
- if (haystack->len + offset + 1 >= needle_len) {
- e = haystack->val + haystack->len + offset + needle_len;
- } else {
+ if (-offset < needle_len) {
e = haystack->val + haystack->len;
+ } else {
+ e = haystack->val + haystack->len + offset + needle_len;
}
}
@@ -2149,10 +2149,10 @@ PHP_FUNCTION(strripos)
RETURN_FALSE;
}
p = haystack_dup->val;
- if (haystack->len + offset + 1 >= needle->len) {
- e = haystack_dup->val + haystack->len + offset + needle->len;
- } else {
+ if (-offset < needle->len) {
e = haystack_dup->val + haystack->len;
+ } else {
+ e = haystack_dup->val + haystack->len + offset + needle->len;
}
}
diff --git a/ext/standard/tests/strings/strrpos.phpt b/ext/standard/tests/strings/strrpos.phpt
index 6b5ee09..691f67e 100644
--- a/ext/standard/tests/strings/strrpos.phpt
+++ b/ext/standard/tests/strings/strrpos.phpt
@@ -15,10 +15,6 @@ 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)
@@ -34,7 +30,3 @@ bool(false)
bool(false)
bool(false)
int(1)
-int(0)
-bool(false)
-int(1)
-int(0)
diff --git a/ext/standard/tests/strings/strrpos_negative_offset.phpt
b/ext/standard/tests/strings/strrpos_negative_offset.phpt
new file mode 100644
index 0000000...940c227
--- /dev/null
+++ b/ext/standard/tests/strings/strrpos_negative_offset.phpt
@@ -0,0 +1,35 @@
+--TEST--
+strr[i]pos() function with negative offset
+--FILE--
+<?php
+ var_dump(strrpos("haysthack", 'ha', -9));
+ var_dump(strrpos("haystack", 'h', -8));
+ var_dump(strrpos("haystack", 'k', -1));
+ var_dump(strrpos("haystack", "ka", -1));
+ var_dump(strrpos("haystack", 'a', -3));
+ var_dump(strrpos("haystack", 'a', -4));
+ var_dump(@strrpos("haystack", 'h', -9));
+
+ var_dump(strripos("HAYSTHACk", 'ha', -9));
+ var_dump(strripos("HAYSTACK", 'h', -8));
+ var_dump(strripos("HAYSTACK", 'k', -1));
+ var_dump(strripos("HAYSTACK", "ka", -1));
+ var_dump(strripos("HAYSTACK", 'a', -3));
+ var_dump(strripos("HAYSTACK", 'a', -4));
+ var_dump(@strripos("HAYSTACK", 'h', -9));
+?>
+--EXPECT--
+int(0)
+int(0)
+int(7)
+bool(false)
+int(5)
+int(1)
+bool(false)
+int(0)
+int(0)
+int(7)
+bool(false)
+int(5)
+int(1)
+bool(false)