diff options
author | Christoph M. Becker <cmb@php.net> | 2016-07-28 13:56:40 +0200 |
---|---|---|
committer | Christoph M. Becker <cmb@php.net> | 2016-07-28 13:57:38 +0200 |
commit | 56cdaecb284b2b292ce1ecb076c1f8b041e47a02 (patch) | |
tree | 9a4c71eb5d6dbad16e4de8125409a5a965119162 | |
parent | d276e6a8386a68d57d5dd07c3d7e15de4b03c6b3 (diff) | |
download | php-git-56cdaecb284b2b292ce1ecb076c1f8b041e47a02.tar.gz |
Fix #72693: mb_ereg_search increments search position when a match zero-width
That's caused by an off-by-one error, which we fix.
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/mbstring/php_mbregex.c | 2 | ||||
-rw-r--r-- | ext/mbstring/tests/bug72691.phpt | 8 | ||||
-rw-r--r-- | ext/mbstring/tests/bug72693.phpt | 41 |
4 files changed, 48 insertions, 5 deletions
@@ -44,6 +44,8 @@ PHP NEWS - mbstring: . Fixed bug #72691 (mb_ereg_search raises a warning if a match zero-width). (cmb) + . Fixed Bug #72693 (mb_ereg_search increments search position when a match + zero-width). (cmb) - PCRE: . Fixed bug #72688 (preg_match missing group names in matches). (cmb) diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c index 3509165ca9..a295f54e4e 100644 --- a/ext/mbstring/php_mbregex.c +++ b/ext/mbstring/php_mbregex.c @@ -1261,7 +1261,7 @@ _php_mb_regex_ereg_search_exec(INTERNAL_FUNCTION_PARAMETERS, int mode) break; } end = MBREX(search_regs)->end[0]; - if (pos < end) { + if (pos <= end) { MBREX(search_pos) = end; } else { MBREX(search_pos) = pos + 1; diff --git a/ext/mbstring/tests/bug72691.phpt b/ext/mbstring/tests/bug72691.phpt index d914a508e0..08f6b153da 100644 --- a/ext/mbstring/tests/bug72691.phpt +++ b/ext/mbstring/tests/bug72691.phpt @@ -26,12 +26,12 @@ var_dump(mb_ereg_search_getpos()); var_dump(mb_ereg_search_getregs()); ?> --EXPECT-- -int(1) +int(0) array(1) { [0]=> string(0) "" } -int(2) +int(0) array(1) { [0]=> string(0) "" @@ -39,9 +39,9 @@ array(1) { int(3) array(1) { [0]=> - string(1) "o" + string(3) "foo" } -int(4) +int(3) array(1) { [0]=> string(0) "" diff --git a/ext/mbstring/tests/bug72693.phpt b/ext/mbstring/tests/bug72693.phpt new file mode 100644 index 0000000000..f269e57f0f --- /dev/null +++ b/ext/mbstring/tests/bug72693.phpt @@ -0,0 +1,41 @@ +--TEST-- +Bug #72693 (mb_ereg_search increments search position when a match zero-width) +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip ext/mbstring required'); +?> +--FILE-- +<?php +mb_ereg_search_init('foo'); + +var_dump(mb_ereg_search('\A')); +var_dump(mb_ereg_search_getpos()); + +var_dump(mb_ereg_search('\s*')); +var_dump(mb_ereg_search_getpos()); + +var_dump(mb_ereg_search('\w+')); +var_dump(mb_ereg_search_getpos()); +var_dump(mb_ereg_search_getregs()); + +var_dump(mb_ereg_search('\s*')); +var_dump(mb_ereg_search_getpos()); + +var_dump(mb_ereg_search('\Z')); +var_dump(mb_ereg_search_getpos()); +?> +--EXPECT-- +bool(true) +int(0) +bool(true) +int(0) +bool(true) +int(3) +array(1) { + [0]=> + string(3) "foo" +} +bool(true) +int(3) +bool(true) +int(3) |