mirror of
https://github.com/php/php-src.git
synced 2025-01-22 11:44:09 +08:00
fix bug #37800: preg_replace() limit parameter odd behaviour
#this is a regression in PHP_5_2 and HEAD branches only
This commit is contained in:
parent
954acfe261
commit
c3ed91477a
@ -1091,7 +1091,7 @@ PHPAPI char *php_pcre_replace(char *regex, int regex_len,
|
||||
if (limit != -1)
|
||||
limit--;
|
||||
|
||||
} else if (count == PCRE_ERROR_NOMATCH) {
|
||||
} else if (count == PCRE_ERROR_NOMATCH || limit == 0) {
|
||||
/* If we previously set PCRE_NOTEMPTY after a null match,
|
||||
this is not necessarily the end. We need to advance
|
||||
the start offset, and continue. Fudge the offset values
|
||||
|
31
ext/pcre/tests/bug37800.phpt
Normal file
31
ext/pcre/tests/bug37800.phpt
Normal file
@ -0,0 +1,31 @@
|
||||
--TEST--
|
||||
Bug #37800 (preg_replace() limit parameter odd behaviour)
|
||||
--FILE--
|
||||
<?php
|
||||
$s_string = '1111111111';
|
||||
$s_search = '/1/';
|
||||
$s_replace = 'One ';
|
||||
$i_limit = 1;
|
||||
$i_count = 0;
|
||||
|
||||
$s_output = preg_replace($s_search, $s_replace, $s_string, $i_limit,
|
||||
$i_count);
|
||||
echo "Output = " . var_export($s_output, True) . "\n";
|
||||
echo "Count = $i_count\n";
|
||||
var_dump(preg_last_error() === PREG_NO_ERROR);
|
||||
|
||||
$i_limit = strlen($s_string);
|
||||
$s_output = preg_replace($s_search, $s_replace, $s_string, $i_limit,
|
||||
$i_count);
|
||||
echo "Output = " . var_export($s_output, True) . "\n";
|
||||
echo "Count = $i_count\n";
|
||||
var_dump(preg_last_error() === PREG_NO_ERROR);
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
Output = 'One 111111111'
|
||||
Count = 1
|
||||
bool(true)
|
||||
Output = 'One One One One One One One One One One '
|
||||
Count = 10
|
||||
bool(true)
|
Loading…
Reference in New Issue
Block a user