diff options
author | Christoph M. Becker <cmb@php.net> | 2016-07-28 15:35:56 +0200 |
---|---|---|
committer | Christoph M. Becker <cmb@php.net> | 2016-07-28 15:50:41 +0200 |
commit | de755310b49dbf06dd03f7bf54c4377c37c7306b (patch) | |
tree | 22a9bf85e506ad0310d5e6b7845073ba2a008e29 /ext/mbstring | |
parent | 6aaef1ed346fcc7f9dad58e47f6418d36c3cbe73 (diff) | |
parent | 805dc0ea4790b8e3dda63ae5753de14823a09bde (diff) | |
download | php-git-de755310b49dbf06dd03f7bf54c4377c37c7306b.tar.gz |
Merge branch 'PHP-7.0' into PHP-7.1
# Resolved conflicts:
# ext/mbstring/php_mbregex.c
Diffstat (limited to 'ext/mbstring')
-rw-r--r-- | ext/mbstring/php_mbregex.c | 2 | ||||
-rw-r--r-- | ext/mbstring/tests/bug72694.phpt | 21 | ||||
-rw-r--r-- | ext/mbstring/tests/mb_ereg_search_setpos.phpt | 8 |
3 files changed, 26 insertions, 5 deletions
diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c index 3b5e857289..fd103abf19 100644 --- a/ext/mbstring/php_mbregex.c +++ b/ext/mbstring/php_mbregex.c @@ -1446,7 +1446,7 @@ PHP_FUNCTION(mb_ereg_search_setpos) 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)))) { + 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; RETURN_FALSE; diff --git a/ext/mbstring/tests/bug72694.phpt b/ext/mbstring/tests/bug72694.phpt new file mode 100644 index 0000000000..90f56a397a --- /dev/null +++ b/ext/mbstring/tests/bug72694.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #72694 (mb_ereg_search_setpos does not accept a string's last position) +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip ext/mbstring required'); +?> +--FILE-- +<?php +mb_ereg_search_init('foo'); + +var_dump(mb_ereg_search_setpos(3)); +var_dump(mb_ereg_search_getpos()); + +var_dump(mb_ereg_search('\Z')); +var_dump(mb_ereg_search_getpos()); +?> +--EXPECT-- +bool(true) +int(3) +bool(true) +int(3) diff --git a/ext/mbstring/tests/mb_ereg_search_setpos.phpt b/ext/mbstring/tests/mb_ereg_search_setpos.phpt index ec354309f3..0a4c18473b 100644 --- a/ext/mbstring/tests/mb_ereg_search_setpos.phpt +++ b/ext/mbstring/tests/mb_ereg_search_setpos.phpt @@ -14,7 +14,7 @@ var_dump(mb_ereg_search_setpos(-1)); // Error mb_ereg_search_init($test_str); -$positions = array( 5, 19, 20, 25, 0, -5, -20, -30); +$positions = array( 5, 20, 21, 25, 0, -5, -20, -30); foreach($positions as $pos) { echo("\n* Position: $pos :\n"); var_dump(mb_ereg_search_setpos($pos)); @@ -32,11 +32,11 @@ bool(false) bool(true) int(5) -* Position: 19 : +* Position: 20 : bool(true) -int(19) +int(20) -* Position: 20 : +* Position: 21 : Warning: mb_ereg_search_setpos(): Position is out of range in %s on line %d bool(false) |