From: Francois Laupretre Date: Mon, 4 Jan 2016 15:31:52 +0000 (+0100) Subject: mb_ereg_search_setpos(): Add support for negative position X-Git-Tag: php-7.1.0alpha1~509 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=882f97042b55d8f7d3c50f453c56b984334247f2;p=php mb_ereg_search_setpos(): Add support for negative position Also add missing test for this function --- diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c index 1bd26d7334..6a9ab193af 100644 --- a/ext/mbstring/php_mbregex.c +++ b/ext/mbstring/php_mbregex.c @@ -1400,6 +1400,11 @@ PHP_FUNCTION(mb_ereg_search_setpos) return; } + /* Accept negative position if length of search string can be determined */ + if ((position < 0) && (!Z_ISUNDEF(MBREX(search_str))) && (Z_TYPE(MBREX(search_str)) == IS_STRING)) { + position += Z_STRLEN(MBREX(search_str)); + } + if (position < 0 || (!Z_ISUNDEF(MBREX(search_str)) && Z_TYPE(MBREX(search_str)) == IS_STRING && (size_t)position >= Z_STRLEN(MBREX(search_str)))) { php_error_docref(NULL, E_WARNING, "Position is out of range"); MBREX(search_pos) = 0; diff --git a/ext/mbstring/tests/mb_ereg_search_setpos.phpt b/ext/mbstring/tests/mb_ereg_search_setpos.phpt new file mode 100644 index 0000000000..ec354309f3 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_search_setpos.phpt @@ -0,0 +1,70 @@ +--TEST-- +mb_ereg_search_setpos() function +--SKIPIF-- + +--FILE-- + +==DONE== +--EXPECTF-- +bool(true) + +Warning: mb_ereg_search_setpos(): Position is out of range in %s on line %d +bool(false) + +* Position: 5 : +bool(true) +int(5) + +* Position: 19 : +bool(true) +int(19) + +* Position: 20 : + +Warning: mb_ereg_search_setpos(): Position is out of range in %s on line %d +bool(false) +int(0) + +* Position: 25 : + +Warning: mb_ereg_search_setpos(): Position is out of range in %s on line %d +bool(false) +int(0) + +* Position: 0 : +bool(true) +int(0) + +* Position: -5 : +bool(true) +int(15) + +* Position: -20 : +bool(true) +int(0) + +* Position: -30 : + +Warning: mb_ereg_search_setpos(): Position is out of range in %s on line %d +bool(false) +int(0) +==DONE== + +