ID: 45923 Updated by: moriyo...@php.net Reported By: d_kelsey at uk dot ibm dot com -Status: Assigned +Status: Closed Bug Type: mbstring related Operating System: * PHP Version: 5.*CVS (2009-01-21) Assigned To: moriyoshi New Comment:
This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Previous Comments: ------------------------------------------------------------------------ [2009-01-19 17:25:16] d_kelsey at uk dot ibm dot com as of php 5.2.8 this bug is still present ------------------------------------------------------------------------ [2008-12-05 13:37:43] a...@php.net I re-tested, this is still happening on the latest 5.2 snap. ------------------------------------------------------------------------ [2008-08-26 16:07:42] d_kelsey at uk dot ibm dot com Description: ------------ The offset checking in mb_stripos and mb_strripos doesn't match the case sensitive equivalents with regard to character counts rather than byte counts. More importantly entering a negative offset in mb_strripos results in a "Offset not contained in string." message which was not expected. Suggested code changes. mb_stripos function add the check: if (offset < 0 || (unsigned long)offset > (unsigned long)mbfl_strlen(&old_haystack)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string."); RETURN_FALSE; } mb_strripos function add the check: if ((offset > 0 && offset > mbfl_strlen(&old_haystack)) || (offset < 0 && -offset > mbfl_strlen(&old_haystack))) { php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Offset is greater than the length of haystack string"); RETURN_FALSE; } php_mb_stripos function remove the check: if (offset < 0 || (unsigned long)offset > haystack.len) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string."); break; } Reproduce code: --------------- <?php var_dump(mb_strripos("abc abc abc", "b", -3)); ?> Expected result: ---------------- int(5) Actual result: -------------- Warning: mb_strripos(): Offset not contained in string. in C:\udata-eclipse\p8\a.phpcode\testmb.php on line 2 bool(false) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=45923&edit=1