ID: 47102
User updated by: wharmby at uk dot ibm dot com
Reported By: wharmby at uk dot ibm dot com
Status: Open
Bug Type: Strings related
Operating System: Windows XP
PHP Version: 6CVS-2009-01-14 (snap)
New Comment:
8 new tests for strripos() just checked into CVS. 3 fail on PHP6
because of this bug and have XFAIL sections which need removing once
this bug is fixed. They are:
ext/standard/tests/strings/strripos_basic2
ext/standard/tests/strings/strripos_variation1
ext/standard/tests/strings/strripos_variation2
Previous Comments:
------------------------------------------------------------------------
[2009-01-14 16:06:32] wharmby at uk dot ibm dot com
Description:
------------
I get an unexpected warning msg when I specify an haystack with a
non-zero offset.
I think the problem lies in the following code in ext/standard/string.c
2913 if (haystack_type == IS_UNICODE) {
2914 if (offset >= 0) {
2915 U16_FWD_N(haystack.u, cu_offset, haystack_len, offset);
2916 if (cu_offset > haystack_len - needle_len) {
2917 php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Offset is greater
than the length of haystack string");
2918 RETURN_FALSE;
2919 }
2920 u_p = haystack.u + cu_offset;
2921 u_e = haystack.u + haystack_len - needle_len;
2922 } else {
If (cu_offset > haystack_len - needle_len) then FALSE should be
returned but the warning is bogus; that should only be output if
cu_offset > haystack_len.
Reproduce code:
---------------
<?php
$haystack = "abcdefg";
$needle = "abcdefg";
var_dump( strripos($haystack, $needle, 0) );
var_dump( strripos($haystack, $needle, 1) );
?>
Expected result:
----------------
int(0)
bool(false)
Actual result:
--------------
int(0)
bool(false)
PHP Notice: strripos(): Offset is greater than the length of haystack
string in .... etc
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=47102&edit=1