com php-src: Fix #72693: mb_ereg_search increments sear ch position when a match zero-width: NEWS ext/m bstring/php_mbregex.c
ext/mbstring/tests/bug7269 1.phpt ext/mbstring/tests/bug72693.phpt

From: Date: Thu, 28 Jul 2016 11:57:38 +0000
Subject: com php-src: Fix #72693: mb_ereg_search increments sear ch position when a match zero-width: NEWS ext/m bstring/php_mbregex.c
ext/mbstring/tests/bug7269 1.phpt ext/mbstring/tests/bug72693.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-93450@lists.php.net to get a copy of this message
Commit: 56cdaecb284b2b292ce1ecb076c1f8b041e47a02 Author: Christoph M. Becker <cmb@php.net> Thu, 28 Jul 2016 13:56:40 +0200 Parents: d276e6a8386a68d57d5dd07c3d7e15de4b03c6b3 Branches: PHP-5.6 PHP-7.0 PHP-7.1 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=56cdaecb284b2b292ce1ecb076c1f8b041e47a02 Log: 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. Bugs: https://bugs.php.net/72693 Changed paths: M NEWS M ext/mbstring/php_mbregex..c M ext/mbstring/tests/bug72691.phpt A ext/mbstring/tests/bug72693.phpt Diff: diff --git a/NEWS b/NEWS index 962be02..7a0e890 100644 --- a/NEWS +++ b/NEWS @@ -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 3509165..a295f54 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 d914a50..08f6b15 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 0000000..f269e57 --- /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)

« previous php.cvs (#93450) next »