Bug #64890 [Nab]: strrpos with negative offset incorrect results
| From: | me at rouvenwessling dot de | Date: | Fri, 31 May 2013 15:54:23 +0000 |
| Subject: | Bug #64890 [Nab]: strrpos with negative offset incorrect results | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-179256@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=64890&edit=1
ID: 64890
User updated by: me at rouvenwessling dot de
Reported by: me at rouvenwessling dot de
Summary: strrpos with negative offset incorrect results
Status: Not a bug
Type: Bug
Package: Strings related
Operating System: OS X
PHP Version: 5.4.15
Block user comment: N
Private report: N
New Comment:
I'd disagree. If I specify a positive offset that many characters from the
beginning of the string are ignored. If I specify a negative offset I expect that
many characters from the end to be ignored. That is also what the documentation
states:
"If specified, search will start this number of characters counted from the
beginning of the string. If the value is negative, search will instead start from
that many characters from the end of the string, searching backwards."
Previous Comments:
------------------------------------------------------------------------
[2013-05-22 07:45:53] laruence@php.net
I dont think it's a bug
'Internationalization' , then -1 , the cursor is at
'Internationalization', exactlly point to the 'n'
^
so, no matter what direction it try to find in, the "n" should be returned
------------------------------------------------------------------------
[2013-05-21 23:25:18] cmbecker69 at gmx dot de
The issue occurs for negative offsets,
when the length of the needle is less than
or equal to the absolute value of the offset.
The cause seems to be in ext/standard/string.c line 1958:
e = haystack + haystack_len + offset;
This lets e reference one character further to the right
than it actually should. Changing this line to:
e = haystack + haystack_len + offset - 1;
fixes the issue and gives the expected result for the test script.
------------------------------------------------------------------------
[2013-05-21 17:53:36] me at rouvenwessling dot de
Description:
------------
Apparently the offset in strrpos doesn't work right if it's the same as the needle
length.
Test script:
---------------
$result = strrpos('Internationalization', 'n', -1);
var_dump($result);
Expected result:
----------------
int(10)
Actual result:
--------------
int(19)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=64890&edit=1