]> granicus.if.org Git - php/commitdiff
Better fix
authorXinchen Hui <laruence@php.net>
Mon, 19 Jan 2015 02:38:25 +0000 (21:38 -0500)
committerXinchen Hui <laruence@php.net>
Mon, 19 Jan 2015 02:38:25 +0000 (21:38 -0500)
ext/standard/string.c
ext/standard/tests/strings/strrpos.phpt
ext/standard/tests/strings/strrpos_negative_offset.phpt [new file with mode: 0644]

index 58073044ca2ca48ba19d7b0733fae701b6db8af5..f746a242fce788cf89591bbc6b6f0639973c2c41 100644 (file)
@@ -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;
                }
        }
 
index 6b5ee0934338df1578109a569da961869f024020..691f67e599e146eca60b2257bd497f009ec96503 100644 (file)
@@ -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 (file)
index 0000000..940c227
--- /dev/null
@@ -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)